A time tracking and invoicing application built with Ruby on Rails, Inertia, Tailwind 4 and Svelte 5.
- Ruby 3.4+
- Node.js 20+
- PostgreSQL (production) or SQLite (development)
- Clone the repository
- Run
bundle install - Run
npm install - Run
bin/rails db:setup - Run
bin/devto start the development server
This application uses Rails encrypted credentials. Edit with:
EDITOR="code --wait" bin/rails credentials:editRequired credentials structure:
site_host: timevoice.mahadk.com # your domain here!
google:
client_id: your_oauth_client_id
client_secret: your_oauth_client_secret
# only affects production!
database:
name: postgres
username: postgres
password: pass_here
host: hostdomain.com
port: 5432
smtp:
address: mail-eu.smtp2go.com
user_name: timevoice
password: pass_here
default_from: [email protected]
cloudflare:
turnstile_site_key: your_turnstile_site_key
turnstile_secret_key: your_turnstile_secret_key
secret_key_base: base_hereWe use Turnstile to protect API endpoints (especially ones that send out emails/notifications!)
- Create a Turnstile widget at https://dash.cloudflare.com
- Choose "Invisible" widget mode
- Add your domain to the allowed hostnames
- Copy the Site Key and Secret Key to your credentials
The application is configured for deployment with Kamal. See the Dockerfile and .kamal directory for configuration. You can also use the Dockerfile directly.
Remember to set RAILS_ENV to production and to set SOLID_QUEUE_IN_PUMA to true in your environment variables for production deployments!
disclosure: AI was used for scaffolding.
