Content:
Pomi is a work-in-progress web application designed for tracking time spent using a timeboxing methodology (e.g. Pomodoro Technique™).
See the Documentation section for in-depth functional and technical specifications, or check out the Functionality and Technologies sections for a quick summary.
It's not recommended since the app is not yet released, but if you'd like to build and run the app locally, see the Instructions section.
- Web client
- Configurable timer
- Logging work sessions to database
- Searching for tasks and projects and linking them to work sessions
- Creating and editing projects and tasks
- Viewing and filtering logged sessions
- User authentication
- Native notifications
- React (front-end library)
- HTML5/JSX and CSS3 (front-end layout and styling)
- Material UI (UI library)
- Redux (client state management)
- Firebase Authentication (OAuth 2.0 authentication solution)
- TypeScript (JavaScript superset with static typing for client and server code)
- Node.js (back-end JavaScript runtime)
- Express.js (HTTP server framework)
- PostgreSQL (SQL database)
- Jest, React Testing Library (testing frameworks)
- Webpack (module bundler)
NOTE: No guarantees provided - this application may fail to build during this pre-release stage.
-
Install Node.js, Yarn, and PostgreSQL
-
Clone the repository:
$ git clone https://github.com/pawelgrimm/pomi.git
-
Set up PostgreSQL (see tutorial or blog for help)
-
Connect to the default database (called postgres):
$ psql
-
Create a new user:
postgres=# CREATE ROLE pomi WITH LOGIN PASSWORD 'root';
-
Create a new database called
pomi_dev
, owned by thepomi
user:postgres=# CREATE DATABASE pomi_example WITH OWNER = pomi;
-
Quit psql:
postgres=# \q
-
Connect to the new database:
$ psql pomi_dev
-
Enable the pgcrypto extension:
pomi_dev=# CREATE EXTENSION pgcrypto;
-
Quit psql:
postgres=# \q
-
-
Set up the config file
-
Create a file called
src/server/config/.env.development
-
Edit it as follows:
DATABASE_URL=postgresql://pomi:root@localhost:5432/pomi_dev PORT=3001
-
-
Provision a new Firebase Authentication application, download the service account key, name them
firebaseServiceAccountKey.json
, and move tosrc/server/config/
-
Install dependencies:
$ yarn install
-
Migrate the database:
$ yarn reset-dev-db
-
Start the app in development mode:
$ yarn develop
-
Set up a new database called
pomi_test
owned by thepomi
user (don't forget connect to the new database:$ psql pomi_test
and enable the pgcrypto extensionpomi_test# CREATE EXTENSION pgcrypto;
) -
Set up the config file:
-
Create a file called
src/server/config/.env.test
-
Edit it as follows:
DATABASE_URL=postgresql://pomi:root@localhost:5432/pomi_test PORT=3001
-
-
Run all tests:
$ yarn test
or run client tests:
$ yarn test:client
or run server tests:
$ yarn test:server
or run shared tests:
$ yarn test:shared
-
Set up a new database called
pomi_prd
owned by thepomi
user (don't forget connect to the new database:$ psql pomi_prd
and enable the pgcrypto extensionpomi_prd=# CREATE EXTENSION pgcrypto;
) -
Set up the config file:
-
Create a file called
src/server/config/.env.production
-
Edit it as follows:
DATABASE_URL=postgresql://pomi:root@localhost:5432/pomi_prd PORT=3001
-
-
Build the app:
$ yarn build
-
Migrate the database:
$ yarn migrate-db prd
-
Serve the app:
$ yarn start
-
Generate a new component (with tests) or database model (with queries, routes, validation, and tests):
$ yarn generate {component|model}
-
Migrate a database to a given version:
$ yarn migrate-db {dev|test|prd} {version}
-
Reset the dev by dropping all contents and running migrations up to highest version:
$ yarn reset-dev-db
or do the same for the test database:
$ yarn reset-test-db
-
Kill the Node.js server (if it misbehaved and didn't exit gracefully):
$ yarn killnode