Skip to content
egekaracaPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

TaskTomo

An AI-assisted study companion for students: tasks, focus sessions, exam prep and studying together, in one app.

App Store Google Play Platforms Languages

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.


Screenshots

Home Tomo (AI assistant) Study room Exam Hub
Task notes Focus timer Schedule & GPA Profile

About

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.


Features

Tasks and planning

  • 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.

Tomo, the AI study assistant

  • 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.

Exam preparation

  • 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.

University mode

  • 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.

Focus and study rooms

  • 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.

Social and progress

  • 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.

Account and platform

  • 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.

Tech stack

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)

Architecture

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
Loading

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.

How an AI action works

  1. The student asks Tomo something, for example to plan their week.
  2. The app builds a dated snapshot of the student's tasks. Each task gets a short reference (t1, t2, ...) instead of its database ID.
  3. The request goes to a single authenticated AI proxy function. The API key never leaves the server.
  4. The proxy validates the request, applies budgets and quotas, and calls Claude.
  5. Claude answers in prose plus a structured action block.
  6. 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.
  7. Valid actions appear as one-tap chips. Tapping one writes the change (or queues it offline), and the real-time listeners update every screen.

Engineering highlights

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.


Testing and release

  • 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.

Localization

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.


Status and roadmap

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.

Author

Designed and developed by Ege Karaca, Computer Engineering student at TED University.

LinkedIn · Email

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors