A full-stack task management application with Japanese language support, built with TypeScript, React, and Express.js.
- ✅ Create, read, update, and delete tasks
- 📅 Set deadlines for tasks
⚠️ Visual warnings for approaching and overdue deadlines- ✓ Mark tasks as completed
- 🇯🇵 Japanese date formatting (YYYY年MM月DD日 HH:mm)
- 📱 Responsive web interface
- 🚀 Real-time updates with React Query
- Yellow highlight: Tasks due within 3 days (期限が近づいています)
- Red highlight: Overdue tasks (期限を過ぎています)
- Node.js 22
- Express.js 5
- TypeScript
- SQLite3 (better-sqlite3)
- Zod for validation
- Winston for logging
- React 19
- TypeScript
- React Router v7
- React Query (TanStack Query)
- Vite
- Axios
- Node.js 22.x or higher
- npm 11.x or higher
- Clone the repository:
git clone https://github.com/serverless-operations/todo-app-using-spec-kit.git
cd todo-app- Install dependencies:
# Install all dependencies (root, backend, and frontend)
npm run install:allnpm run devThis will start:
- Backend API server on http://localhost:4000
- Frontend dev server on http://localhost:5173
Backend only:
npm run dev:backendFrontend only:
npm run dev:frontend# Build both backend and frontend
npm run build
# Start production server
npm run startnpm run testnpm run test:backendnpm run test:frontendcd backend && npm run test:coverage
cd frontend && npm run test:coveragetodo-app/
├── backend/
│ ├── src/
│ │ ├── db/ # Database initialization
│ │ ├── middleware/ # Express middleware
│ │ ├── models/ # Data models and validation
│ │ ├── routes/ # API routes
│ │ ├── services/ # Business logic
│ │ ├── types/ # TypeScript types
│ │ └── utils/ # Utility functions
│ ├── tests/
│ │ ├── contract/ # API contract tests
│ │ ├── integration/ # Integration tests
│ │ └── unit/ # Unit tests
│ └── data/ # SQLite database file
├── frontend/
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── hooks/ # Custom React hooks
│ │ ├── pages/ # Page components
│ │ ├── providers/ # Context providers
│ │ ├── services/ # API services
│ │ └── types/ # TypeScript types
│ └── tests/ # Frontend tests
├── docs/ # Documentation
└── specs/ # Specifications
See docs/api.md for detailed API documentation.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/tasks |
Get all active tasks |
| GET | /api/tasks/completed |
Get completed tasks |
| GET | /api/tasks/:id |
Get task by ID |
| POST | /api/tasks |
Create new task |
| PUT | /api/tasks/:id |
Update task |
| DELETE | /api/tasks/:id |
Delete task |
| PATCH | /api/tasks/:id/complete |
Mark task as complete |
PORT=4000
FRONTEND_URL=http://localhost:5173
VITE_API_URL=http://localhost:4000
The application uses SQLite for data persistence. The database file is automatically created at backend/data/tasks.db on first run.
CREATE TABLE tasks (
id TEXT PRIMARY KEY,
content TEXT NOT NULL,
deadline TEXT NOT NULL,
status TEXT NOT NULL,
created_at TEXT NOT NULL,
completed_at TEXT
)npm run dev- Run both backend and frontend in development modenpm run build- Build both backend and frontendnpm run start- Start production servernpm run test- Run all testsnpm run install:all- Install all dependencies
npm run dev- Start development server with hot reloadnpm run build- Compile TypeScript to JavaScriptnpm run start- Start production servernpm run test- Run testsnpm run db:init- Initialize database
npm run dev- Start Vite dev servernpm run build- Build for productionnpm run preview- Preview production buildnpm run lint- Run ESLint
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License.
Built with Spec-Driven Development methodology.