Cresca is a personal learning operating system built for working professionals and self-taught learners who only have a few hours a day.
Most people who want to learn something new a new tech skill, a side project, a career pivot fail not because of lack of motivation, but because of three things:
- β No focus β distractions kill deep work
- β No structure β they don't know what to learn next or where they left off
- β No visibility β they can't see their own progress, so they feel stuck
Cresca solves all three in one focused space.
A full stack developer who works 9β6 can open Cresca after work, see exactly where he left off on his AI/ML journey, start a distraction-free focus session, let Grok AI tell him what to study next and log everything automatically.
| Feature | Description |
|---|---|
| π― Focus Mode | Distraction-free Pomodoro timer (25/45/60/90 min). Live note-taking during sessions. Auto-logs study hours to goal on completion. |
| πΊοΈ Learning Roadmap | 5 predefined paths, 5 stages each, 20β25 topics per path. Click topics to mark Not Started β Learning β Confident. AI reads your progress and suggests what to study next. |
| π Learning Journal | Auto-created after every focus session. Captures what you learned, what confused you, your next step, and your focus quality (emoji mood). Builds a searchable diary of your entire journey. |
| ποΈ Project Board | Kanban board (To Do β In Progress β Done) for your dream project. Tasks linked to goals with Low / Medium / High priority. Overall completion percentage. |
| π Knowledge Hub | Notion-style notes editor with sidebar navigation, word count, and auto-save. Resource library (links, videos, docs, books) per goal. |
| π Track Growth | Real analytics from actual study data. Weekly bar chart, monthly totals, current streak, active days, daily average. AI weekly report from your real numbers. |
| π€ AI Coach (Grok) | Context-aware AI powered by Grok. On the roadmap it reads your topic progress. On the journal prompt it knows your goal. On weekly report it reads your real stats. |
| π€ Profile + Onboarding | 4-step onboarding wizard β name, learning path, first goal, daily target. Profile page with stats, settings, and daily goal bar on the Today page. |
| π Dark Mode | Full dark mode support persisted in localStorage across all pages. |
| Technology | Purpose |
|---|---|
| Node.js | Runtime environment |
| Express.js | Web framework and routing |
| PostgreSQL | Relational database |
| Sequelize | ORM for database interaction |
| JWT (jsonwebtoken) | Stateless authentication tokens |
| bcryptjs | Password hashing |
| dotenv | Environment variable management |
| Grok API | AI coaching and weekly reports |
| Technology | Purpose |
|---|---|
| React (Create React App) | UI framework |
| React Router DOM | Client-side routing |
| Axios | HTTP requests with auth interceptor |
| Tailwind CSS | Utility-first styling |
| Recharts | Weekly/monthly analytics charts |
| Context API | Global auth state management |
| Service | Purpose |
|---|---|
| Railway | Backend hosting + PostgreSQL database |
| Vercel | Frontend hosting with auto-deploy |
This project follows a clean RESTful MVC architecture on the backend.
Request β Route β Middleware (Auth) β Controller β Model β Database
β
Response
- Routes β Map URLs to controller functions
- Middleware β JWT verification on all protected routes
- Controllers β Receive requests, send responses
- Models β Sequelize schemas and database interaction only
This separation means changing data logic never requires touching the HTTP layer, and vice versa.
cresca/
βββ backend/
β βββ config/
β β βββ db.js # Sequelize + PostgreSQL connection
β βββ controllers/
β β βββ authController.js # Register, login, profile
β β βββ goalController.js # CRUD for goals
β β βββ studyController.js # Study logs + weekly/monthly analytics
β β βββ noteController.js # Notes per goal
β β βββ resourceController.js # Resources per goal
β β βββ journalController.js # Learning journal entries
β β βββ focusController.js # Focus session tracking
β β βββ roadmapController.js # Topic progress per path
β β βββ taskController.js # Kanban task management
β β βββ aiController.js # Grok AI coach endpoint
β βββ middleware/
β β βββ auth.js # JWT authentication middleware
β βββ models/
β β βββ User.js
β β βββ Goal.js
β β βββ StudyLog.js
β β βββ Note.js
β β βββ Resource.js
β β βββ JournalEntry.js
β β βββ FocusSession.js
β β βββ TopicProgress.js
β β βββ Task.js
β βββ routes/
β β βββ ... # One route file per model
β βββ .env
β βββ server.js
β
βββ frontend/
βββ src/
βββ api/
β βββ axios.js # Axios instance with auth interceptor
βββ components/
β βββ AiCoach.js # Reusable AI chat component
β βββ ProtectedRoute.js # Route guard using localStorage token
βββ context/
β βββ AuthContext.js # Global auth state
βββ pages/
βββ Today.js # Home dashboard
βββ FocusMode.js # Pomodoro timer + journal prompt
βββ Journal.js # Learning journal browser
βββ Roadmap.js # Learning path tracker
βββ ProjectBoard.js # Kanban board
βββ KnowledgeHub.js # Notes + resource library
βββ TrackGrowth.js # Analytics + AI weekly report
βββ Dashboard.js # Goal management
βββ Profile.js # User settings + stats
βββ Onboarding.js # First-time setup wizard
βββ Login.js
βββ Register.js
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/auth/register |
No | Create account |
| POST | /api/auth/login |
No | Login and get JWT token |
| GET | /api/auth/profile |
Yes | Get own profile |
| PUT | /api/auth/profile |
Yes | Update name, daily goal, onboarding status |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/goals |
Yes | Get all goals for logged-in user |
| POST | /api/goals |
Yes | Create a new goal |
| DELETE | /api/goals/:id |
Yes | Delete goal (owner only) |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/studylogs |
Yes | Log a study session (updates goal progress) |
| GET | /api/studylogs/weekly |
Yes | Hours studied per day for last 7 days |
| GET | /api/studylogs/monthly |
Yes | Total hours, streak, avg daily, active days |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/notes/:goalId |
Yes | Get all notes for a goal |
| POST | /api/notes |
Yes | Create a note |
| PUT | /api/notes/:id |
Yes | Update note title and content |
| DELETE | /api/notes/:id |
Yes | Delete a note |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/resources/:goalId |
Yes | Get all resources for a goal |
| POST | /api/resources |
Yes | Save a resource (link, video, doc, book) |
| DELETE | /api/resources/:id |
Yes | Delete a resource |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/focus |
Yes | Save a completed focus session |
| GET | /api/focus |
Yes | Get all focus sessions for user |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/journal |
Yes | Create journal entry after session |
| GET | /api/journal |
Yes | Get all journal entries for user |
| GET | /api/journal/:goalId |
Yes | Get journal entries for a specific goal |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/roadmap |
Yes | Get all topic progress for user |
| POST | /api/roadmap |
Yes | Update a topic status (upsert) |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/tasks |
Yes | Get all tasks for user |
| POST | /api/tasks |
Yes | Create a task |
| PUT | /api/tasks/:id |
Yes | Update task (status, priority, title) |
| DELETE | /api/tasks/:id |
Yes | Delete a task |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/ai/coach |
Yes | Send message to Grok AI coach |
The AI coach is powered by Grok and is context-aware throughout the app.
On the Roadmap page β When you click "What to study next?", the app reads your actual topic progress (which topics are confident, learning, or not started) and builds a prompt from that data before sending to Grok.
On the Journal prompt β After a focus session ends, the AI knows which goal you just worked on and how long you studied.
On Track Growth β The weekly report button collects your real stats (hours this week, best day, streak, active goals) and sends them to Grok, which returns a mentor-style personal summary.
User data (goal + progress + stats)
β
Context prompt built on frontend
β
POST /api/ai/coach { message }
β
Backend sends to Grok API
β
Response returned to user
π Full Stack Web Development β HTML β CSS β JS β React β Node.js β PostgreSQL β Deploy
π Data Science β Python β Pandas β NumPy β Scikit-learn β ML β Deploy
π€ AI / Machine Learning β Math β PyTorch β CNNs β Transformers β LLMs β Agents
βοΈ Backend Development β Node.js β APIs β Databases β Redis β Docker β CI/CD
π¨ Frontend Development β HTML/CSS β React β Hooks β TypeScript β Next.js β PWA
Each path has 5 stages and 20β25 topics. Topics cycle through:
β¬ Not Started β π‘ Learning β π’ Confident β β¬ (reset)
Progress is saved per user to the database. AI reads the current state on every request.
- Node.js v18+
- PostgreSQL running locally
- Grok API key
git clone https://github.com/moreinn/cresca.git
cd crescacd backend
npm installnpm run devServer runs on http://localhost:5000
cd frontend
npm installCreate frontend/.env:
REACT_APP_API_URL=http://localhost:5000/apinpm startApp runs on http://localhost:3000 β the onboarding wizard will guide you through setup.
| Layer | Platform | Notes |
|---|---|---|
| Frontend | Vercel | Auto-deploys on push to main |
| Backend | Railway | Node.js service, root directory = backend |
| Database | Railway PostgreSQL | DATABASE_URL auto-injected into backend |
Railway (backend):
DATABASE_URL β auto-added by Railway PostgreSQL
JWT_SECRET β your secret key
OPENAI_API_KEY β your Grok API key
FRONTEND_URL β https://your-app.vercel.app
NODE_ENV β productionVercel (frontend):
REACT_APP_API_URL β https://your-railway-url.up.railway.app/api| Concept | Implementation |
|---|---|
| JWT Authentication | Stateless auth using signed tokens, no server-side sessions |
| Password Hashing | bcrypt with salt rounds, passwords never stored in plain text |
| Protected Routes | Frontend route guard + backend middleware using JWT |
| User Data Isolation | Every query filtered by req.user.id from decoded JWT |
| Upsert Pattern | Roadmap topic progress uses findOrCreate for efficiency |
| Context API | React global auth state without external libraries |
| Analytics Aggregation | Sequelize fn('DATE') + fn('SUM') for daily study grouping |
| AI Context Building | User data assembled on frontend into structured prompts before API call |
Moinuddin Shaikh β Node.js Backend Developer
Built for people who are serious about growth but have limited time.
Every hour you study inside Cresca compounds.