Taskfy is a full-stack task management application built with Ruby on Rails 8 and React. It provides a JSON API for core resources (tasks, users, sessions, comments) and serves a SPA-style frontend shell from Rails.
- Overview
- Architecture
- Tech Stack
- API
- Repository Layout
- Local Development
- Testing & Code Quality
- Deployment
- Troubleshooting
Taskfy is designed for a Rails-first backend workflow with a modern frontend toolchain.
- Rails handles domain logic, persistence, and JSON responses.
- React handles interactive UI components in the frontend shell.
- Vite/esbuild provide fast frontend development and bundling.
- SQLite keeps local setup lightweight.
- Backend framework: Rails 8 (
config.load_defaults 8.0) - API rendering: Jbuilder templates under
app/views/**/.json.jbuilder - Auth/session flow: session resource (
POST /session,DELETE /session) - Authorization: Pundit policy layer (e.g.,
app/policies/task_policy.rb) - Frontend entrypoint:
app/javascript/src/App.jsxserved through Rails routing fallback
- Ruby on Rails
~> 8.0.4 - SQLite3
- Pundit
- Jbuilder
- Solid Queue / Solid Cache / Solid Cable
- React 18
- Vite
- esbuild
- Sass
- Tailwind CSS
- RuboCop
- ESLint + Prettier
- Brakeman
- Husky + lint-staged
JSON routes are defined with a format: :json constraint in config/routes.rb.
| Method | Path | Purpose |
|---|---|---|
| GET | /tasks |
List tasks |
| POST | /tasks |
Create task |
| GET | /tasks/:slug |
Get task by slug |
| PATCH / PUT | /tasks/:slug |
Update task |
| DELETE | /tasks/:slug |
Delete task |
| GET | /users |
List users |
| POST | /users |
Create user |
| POST | /session |
Sign in / create session |
| DELETE | /session |
Sign out / destroy session |
| POST | /comments |
Create comment |
taskfy/
├── app/
│ ├── controllers/ # Request handling and API actions
│ ├── javascript/ # React source, entrypoints, stylesheets
│ ├── models/ # ActiveRecord models
│ ├── policies/ # Pundit authorization policies
│ └── views/ # ERB and Jbuilder templates
├── config/ # Rails config, routes, env settings
├── db/ # Schema and migration/data files
├── bin/ # Dev and maintenance scripts
├── Procfile.dev # Foreman process definitions
├── Gemfile # Ruby gems
└── package.json # JavaScript dependencies/scripts
Install:
- Ruby (version compatible with
.ruby-version) - Bundler
- Node.js + Yarn
- SQLite3
git clone <repo-url>
cd taskfy
bundle install
yarn install
bin/rails db:prepareAlternative bootstrap flow:
bin/setupbin/devbin/dev uses Procfile.dev and starts:
- Rails server
- JS build watcher
- Vite dev server
Default URL: http://localhost:3000
bin/rails testbin/rubocopbin/brakemanyarn eslint app/javascript --ext .js,.jsx
yarn prettier --check "app/javascript/**/*.{js,jsx}"The repository includes Docker and Kamal configuration.
Build a local image:
docker build -t taskfy:latest .Before deploying, review:
config/deploy.yml.kamal/secrets
- Port conflict:
PORT=3001 bin/dev - Dependency mismatch: rerun
bundle installandyarn install - Database reset:
bin/rails db:drop db:create db:migrate