Tracks is a GTD™ web application, built with Ruby on Rails https://www.getontracks.org/
Find a file
Claude 1e0cfe5270
Add embedded web UI with dark/light mode support
Features:
- Single binary deployment with embedded HTML templates
- Dark and light mode theme switcher with localStorage persistence
- Server-side rendered Go templates
- Clean, modern UI with CSS variables for theming
- Login page with default admin credentials hint
- Dashboard with statistics and quick actions
- Admin user management page
- Session management via HTTP-only cookies

Implementation:
- Created web templates in cmd/tracks/web/templates/
  - base.html: Main layout with navigation and theme toggle
  - login.html: Login form with first-time user hint
  - dashboard.html: Main dashboard with stats cards and recent todos
  - admin_users.html: User management with create user modal
- Added web_handler.go for serving web UI
  - ShowLogin: Renders login page
  - HandleLogin: Processes login form, sets cookie, redirects to dashboard
  - HandleLogout: Clears cookie, redirects to login
  - ShowDashboard: Shows personalized dashboard with stats
  - ShowAdminUsers: Admin-only user management page
  - HandleCreateUser: Processes user creation form
- Updated main.go to embed templates using //go:embed
- Added web routes before API routes:
  - GET/POST /login (public)
  - GET /logout (public)
  - GET / and /dashboard (authenticated)
  - GET/POST /admin/users (authenticated + admin)

UI Features:
- Responsive design with mobile support
- Theme persistence across sessions
- Clean card-based layout
- Statistics dashboard (active todos, projects, contexts, completed today)
- Quick action buttons
- Admin badge for admin users
- Navigation menu with conditional admin links

Security:
- HttpOnly cookies for session tokens
- Admin middleware for protected routes
- CSRF protection via form POST
- Password fields properly masked

No external dependencies - all CSS and JS inline in templates.
Everything compiles into single binary.

Tested:
- Login page renders correctly ✓
- Login form submits and creates session ✓
- Dashboard displays with user info ✓
- Theme toggle functionality included ✓
- Admin user sees admin links ✓
2025-11-05 11:56:31 +00:00
.github Dependabot Ruby version 2025-06-29 14:51:18 +03:00
app Add Traditional Chinese (Taiwan) localization support 2025-09-05 16:19:23 +08:00
bin Change to a new JS preprocessor, change from MySQL to MariaDB and fix polling 2025-06-29 21:27:27 +03:00
cmd/tracks Add embedded web UI with dark/light mode support 2025-11-05 11:56:31 +00:00
config Add Traditional Chinese (Taiwan) localization support 2025-09-05 16:19:23 +08:00
db Update schema.rb for Postgres support 2024-07-19 14:00:19 +03:00
doc Release 2.7.1 2024-07-25 23:54:52 +03:00
internal Add embedded web UI with dark/light mode support 2025-11-05 11:56:31 +00:00
lib Upgrade to RoR 7.0 2025-06-28 16:25:52 +03:00
log update gitignore rules to match rails 3.2.8 defaults 2012-09-27 10:37:36 -04:00
public Error message fixes for CSV import. Add the necessary directory to Docker image. 2022-02-09 11:28:05 +02:00
script Change to a new JS preprocessor, change from MySQL to MariaDB and fix polling 2025-06-29 21:27:27 +03:00
test Update the date formatting syntax 2025-06-29 13:25:14 +03:00
test-envs Use MariaDB instead of MySQL also in tests 2025-06-30 00:49:34 +03:00
vendor/assets Drop vendored SWFObject. Included in swf_fu. 2017-02-12 15:16:05 -05:00
.codeclimate.yml Rubocop still doesn't support Ruby > 2.5, so let's disable that. 2024-06-06 00:31:07 +03:00
.dockerignore Replace the version-specific Dockerfiles with one staged Dockerfile 2024-07-18 21:09:04 +03:00
.env.example Simplify database support to SQLite only 2025-11-05 11:23:40 +00:00
.gitignore Rewrite Tracks application in Golang 2025-11-05 10:46:59 +00:00
.rubocop.yml Relax the Rubocop limits a bit to make CodeClimate more useful 2022-02-22 23:23:14 +02:00
.ruby-version Dependabot Ruby version 2025-06-29 14:51:18 +03:00
.yardopts Yardoc - show private and protected methods in api doc 2011-10-24 21:40:18 +02:00
config.ru Revert to stock config.ru 2015-03-08 20:50:27 -04:00
CONTRIBUTING.md Document coding style and adding tests 2022-09-07 15:09:41 +03:00
COPYING Add GPLv2 license text 2013-01-26 12:59:25 -05:00
docker-compose.yml Rewrite Tracks application in Golang 2025-11-05 10:46:59 +00:00
docker-entrypoint.sh Hopefully the final fixes based on fresh installs with both Docker install methods 2020-07-20 00:58:45 +03:00
Dockerfile Rewrite Tracks application in Golang 2025-11-05 10:46:59 +00:00
Gemfile Bump rubocop from 1.78.0 to 1.81.1 2025-09-29 00:01:45 +00:00
Gemfile.lock Bump rubocop from 1.81.6 to 1.81.7 2025-11-03 00:01:34 +00:00
go.mod Simplify database support to SQLite only 2025-11-05 11:23:40 +00:00
go.sum Simplify database support to SQLite only 2025-11-05 11:23:40 +00:00
mkdocs.yml Specify pages for MkDocs 2014-10-02 11:15:13 -04:00
Rakefile Bring a few details in line with Rails 4.1 2014-06-19 12:33:38 -04:00
README.md Remove the IRC channel for now 2024-07-25 23:59:05 +03:00
README_GOLANG.md Add default admin user and admin-only user creation 2025-11-05 11:35:36 +00:00
SECURITY.md Merge pull request #2491 from TracksApp/release_2.5.1 2020-09-24 13:03:55 +03:00
test_api.sh Fix polymorphic tagging and add test script 2025-11-05 10:59:26 +00:00

Tracks: a GTD™ compatible web application built with Ruby on Rails

Build Status Code Climate Translation status CII Best Practices

About

Full instructions for both new installations and upgrades from older installations of Tracks can be found in the wiki.

As always, make sure that you take sensible precautions and back up all your data frequently, taking particular care when you are upgrading.

Enjoy being productive!

Contributors and consulting

If you are thinking about contributing towards the development of Tracks, please read /CONTRIBUTING.md for general information. Also you can find some information on development, testing and contributing on the wiki.