The Starting Point
Eclipse began as a humble Python CLI todo app — 200 lines of code, JSON file storage, zero tests. The goal was simple: learn the fundamentals of CRUD operations before layering on complexity.
The Spec-Driven Pivot
After the CLI version was stable, I wrote a full specification for the production version:
- Authentication: JWT-based with refresh tokens
- Database: PostgreSQL with Prisma ORM
- API: FastAPI with auto-generated OpenAPI docs
- AI Integration: Smart task prioritization using OpenAI
- Frontend: Next.js 16 with App Router
Architecture
Next.js 16 (Frontend)
↕ HTTP/REST
FastAPI (Backend)
↕ Prisma
PostgreSQL (Database)
Why FastAPI?
The CLI version was Python, so sticking with Python for the backend was natural. FastAPI gave us automatic OpenAPI docs, async support out of the box, and excellent Prisma compatibility.
The AI Feature
The most interesting feature is Smart Priority — OpenAI analyzes your task list and suggests priority levels based on deadlines, dependencies, and task descriptions. It uses a simple prompt chain:
- Extract deadlines from task descriptions
- Identify task dependencies
- Suggest priority: High / Medium / Low
- Explain the reasoning
Deployment
- Frontend: Vercel
- Backend: Railway
- Database: Neon (serverless PostgreSQL)
- CI/CD: GitHub Actions
Takeaways
Starting with a CLI forced me to think about the core logic before worrying about UI. The spec-driven approach meant the FastAPI backend was built in 3 focused days — no scope creep, no rework.