Skip to content

Simple, open-source time tracking and invoicing tool

Notifications You must be signed in to change notification settings

skyfallwastaken/timevoice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

32984e3 · · Feb 10, 2026

History

29 Commits
Feb 1, 2026
Feb 1, 2026
Feb 5, 2026
Feb 1, 2026
Feb 5, 2026
Feb 5, 2026
Feb 5, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 5, 2026
Feb 1, 2026
Feb 5, 2026
Feb 5, 2026
Feb 3, 2026
Feb 10, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 3, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026
Feb 1, 2026

Repository files navigation

Timevoice

image of timevoice

A time tracking and invoicing application built with Ruby on Rails, Inertia, Tailwind 4 and Svelte 5.

Requirements

  • Ruby 3.4+
  • Node.js 20+
  • PostgreSQL (production) or SQLite (development)

Setup

  1. Clone the repository
  2. Run bundle install
  3. Run npm install
  4. Run bin/rails db:setup
  5. Run bin/dev to start the development server

Configuration

Credentials

This application uses Rails encrypted credentials. Edit with:

EDITOR="code --wait" bin/rails credentials:edit

Required 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_here

Cloudflare Turnstile

We use Turnstile to protect API endpoints (especially ones that send out emails/notifications!)

  1. Create a Turnstile widget at https://dash.cloudflare.com
  2. Choose "Invisible" widget mode
  3. Add your domain to the allowed hostnames
  4. Copy the Site Key and Secret Key to your credentials

Deployment

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.

About

Simple, open-source time tracking and invoicing tool

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published