An AI-assisted study companion for students: tasks, focus sessions, exam prep and studying together, in one app.
Note: TaskTomo is a closed-source product. This repository is a technical showcase that describes what the app does and how it is built. It does not contain the source code.
| Home | Tomo (AI assistant) | Study room | Exam Hub |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Task notes | Focus timer | Schedule & GPA | Profile |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
TaskTomo brings the tools a student usually spreads across several apps into one place: a task planner, a Pomodoro timer, a class timetable with GPA tracking, mock exam analysis, and shared study rooms. An AI assistant called Tomo sits on top of all of it. Tomo can see the student's own tasks and statistics and turn a conversation into concrete actions, such as adding a task or starting a focus session, with a single tap.
The app is designed and built solo, from the mobile client to the backend, the AI layer, the admin panel and the marketing website.
- Create, edit, complete and reschedule tasks with due dates, times and reminders on a horizontal day calendar.
- A block-based notes editor inside every task, with debounced auto-save.
- An overdue sheet for rescheduling or clearing unfinished work from earlier days.
- AI task breakdown that splits a large task into smaller, actionable subtasks.
- A customizable home screen where cards can be reordered or hidden.
- A conversational assistant that works with the student's real tasks and statistics.
- Replies include one-tap action chips to add, complete or reschedule tasks, or to start a focus session. Deletion is deliberately never offered.
- In-chat charts for focus time, task completion and mock exam trends. The numbers are computed by the app, not by the model.
- Exam coaching with web search, restricted to official sources for each exam and cited inline.
- Stored chat history.
- An Exam Hub with a countdown to exam day, mock exam results, AI analysis and exam settings.
- Mock exam logging with trend charts.
- AI diagnosis of strengths and weaknesses across all results, or for a single mock exam.
- Support for YKS and LGS (Turkish university and high school entrance exams) and the SAT, each with its own scoring logic.
- A weekly class timetable with colour-coded courses and an upcoming agenda.
- Per-course grade components, credit-weighted GPA, and absolute or curved (T-score) grading.
- A "What do I need?" calculator for the average required on remaining exams to reach a target letter grade.
- Syllabus import: upload a syllabus PDF and let AI extract the schedule and grading breakdown.
- Attendance tracking against each course's absence limit.
- A Pomodoro timer whose completed sessions feed streaks and statistics, with a daily focus goal and an AI-written session debrief.
- Study rooms joined with a 6-character code, where members follow a shared group timer or run their own.
- Room intents: members state a goal for the round and confirm at the break whether they finished it.
- Room chat with read receipts, AI translation for members who speak different languages, and moderation tools (rules on first entry, profanity filtering, report and block).
- A full-screen pixel-art campfire scene with optional ambient sound.
- Mutual-consent friends, one-to-one messages between friends, presence ("online" or "studying") and room invites.
- Server-calculated XP and levels, a study streak with streak freezes, and unlockable colour palettes and cosmetics.
- Daily, weekly and monthly statistics and a profile progress board.
- Push and local notifications (reminders, daily plan, streak at risk, exam countdown), each group switchable on or off.
- Questions-first onboarding, sign-in with email, Google or Apple, and automatically generated usernames.
- A readable HTML export of the user's data, and account deletion with re-authentication.
- A web admin panel for exam dates, auto-translated broadcasts, and a force-update version gate.
- A multi-language marketing website with a B2B page for institutions.
| Layer | Technologies |
|---|---|
| Mobile client | React Native 0.81, React 19.1, Expo SDK 54 (managed workflow, custom dev client), TypeScript 5.9 (strict) |
| Navigation & state | Expo Router 6 on React Navigation 7; domain-split React Context providers |
| UI | Reanimated 4, Gesture Handler, custom UI kit and theming (light/dark, level-gated palettes), Lucide icons |
| Localization | i18next, react-i18next, expo-localization |
| Backend | Firebase Auth, Cloud Firestore, Cloud Functions (2nd gen, Node 22, TypeScript), Cloud Storage, Firebase Hosting, App Check |
| AI | Anthropic Claude API (Claude Haiku 4.5 for fast tasks, Claude Sonnet 4.6 for deeper analysis), server-side web search tool |
| Web | Vite + Preact (study web app), static HTML/JS (admin panel, marketing site) |
| Monitoring & delivery | Sentry, EAS Build, EAS Submit, EAS Update (over-the-air updates) |
| Payments | RevenueCat (integrated, currently switched off) |
flowchart LR
subgraph Client
A[React Native app<br/>context providers + offline outbox]
W[Admin panel & web apps]
end
subgraph Firebase
FS[(Cloud Firestore<br/>+ security rules)]
CF[Cloud Functions<br/>callables, triggers, scheduled jobs]
ST[(Cloud Storage)]
end
AI[Anthropic Claude API]
A -- real-time listeners,<br/>rules-checked writes --> FS
A -- callables --> CF
W --> CF
CF --> FS
FS -- triggers --> CF
CF -- AI proxy --> AI
A --> ST
The client is a thick React Native app. Each domain (tasks, timer, courses, exams, rooms, friends, notifications and so on) has its own context provider that subscribes to Firestore in real time and exposes typed actions.
The backend follows one rule: anything that grants value or costs money goes through Cloud Functions, never through direct client writes. Firestore security rules authorize the data the client owns directly (tasks, courses, profile basics, social edges, room membership). XP, levels, streaks, AI calls, matchmaking and push delivery are handled on the server. Firestore triggers take care of side effects such as push notifications and public profile mirroring, and scheduled functions clean up stale rooms and aggregate activity.
- The student asks Tomo something, for example to plan their week.
- The app builds a dated snapshot of the student's tasks. Each task gets a short reference (
t1,t2, ...) instead of its database ID. - The request goes to a single authenticated AI proxy function. The API key never leaves the server.
- The proxy validates the request, applies budgets and quotas, and calls Claude.
- Claude answers in prose plus a structured action block.
- The app validates every action. Dates and times are checked, and any action that points to a reference not in the snapshot is dropped as invented.
- Valid actions appear as one-tap chips. Tapping one writes the change (or queues it offline), and the real-time listeners update every screen.
Server-authoritative progression. XP, levels, study minutes, streaks and streak freezes can only be written by the server. Claimed focus time is checked against real elapsed time, and task completion only counts when the task actually changes state, so progress cannot be inflated from a modified client.
Layered AI cost control. The AI proxy enforces a model allowlist, caps on output tokens, input size and PDF size, per-feature quotas, a per-user daily cap, and an app-wide daily ceiling with a manual kill-switch. A failed upstream call refunds the user's quota. Long lecture PDFs are processed once into a compact plan, so later turns do not resend the file.
Grounded AI output. The model never sees database IDs, never receives a delete action, and cannot produce chart data. Charts are rendered from the same functions the statistics screen uses, so the assistant and the stats screen can never disagree.
Offline-first on the Firebase JS SDK. A custom local-first layer keeps a persistent outbox of pending changes, a cached task list for offline startup, and an overlay that shows pending changes immediately. On reconnect the queue is replayed in order, including the server-side callables.
Real-time study rooms. Room data is readable by members only, and security rules let each user insert or edit only their own membership entry within the room's capacity. Read receipts use one "last read" timestamp per member instead of one write per message, and a scheduled job removes orphaned message subcollections.
Local-day streaks. Streaks follow the student's own midnight rather than UTC, which matters for late-night studying. The client-supplied date is clamped on the server so a modified client cannot invent extra days.
Safe social features. Friendships require mutual consent, direct messages require an existing friendship and no block on either side, and presence shows only whether a friend is studying, never which room they are in.
Shipping switched off. Leagues, quests, custom timers and monetization each have both client and server feature flags, so finished features can ship dark. A force-update gate managed from the admin panel sets minimum and latest builds, and EAS Update delivers JavaScript fixes over the air.
- Unit tests: Jest with ts-jest, around 46 client test files covering pure logic such as AI action extraction, the offline outbox, GPA and grading, exam scoring, onboarding and username rules.
- Backend tests: Jest suites for awards, streaks and freezes, leagues, matchmaking and quotas.
- Security rules: validated locally against the Firestore emulator before deploy.
- Static checks: ESLint, TypeScript strict mode and Knip for dead code.
- Release: EAS Build profiles for development, preview and production, EAS Submit for store submission, and EAS Update channels for over-the-air fixes. Each version is developed on a release branch and tagged when it ships.
TaskTomo is available in English, Turkish, German and Dutch. The UI, notifications and AI prompts are all localized, and the device language is detected automatically. Notifications are stored as translation keys, so each device renders them in its own language.
TaskTomo is live on the App Store and Google Play. It is currently free, with no ads and no in-app purchases.
Built and waiting for release:
- Study room matchmaking: join a room with peers of a similar education level and language, with server-side matching that respects blocks.
- Weekly leagues and rotating quests with rewards (built and tested, behind feature flags).
- Web study app: upload lecture PDFs and let Tomo turn them into an interactive, section-by-section lesson.
Designed and developed by Ege Karaca, Computer Engineering student at TED University.







