Project Info
Inspiration
We both have ADHD. And we both live the same frustrating cycle: someone mentions lunch plans while we're walking to class. We agree. We mean to add it to our calendar. We forget. We miss lunch. Or we're mid-conversation and realize we need to move a meeting. But stopping to open our laptop and navigate through calendar interfaces feels like too much. So we don't. And we double-book ourselves. We were tired of living like this. Tired of being the person frantically typing on their phone while walking, head down, just to capture a fleeting thought before it vanishes. To-do list apps demand we sit down, categorize, and organize when our brains don't work that way. Productivity tools require more executive function than we have to give. We didn't want another to-do list, another complex calendar interface, or have to try harder to remember things. We wanted something that worked the way our brains actually work: spontaneous, conversational, and immediate. Something that meets our standards for design and simplicity, not just another cluttered app that adds to the mental load. So we built Kali. A calendar that listens when we remember things in passing, captures them instantly without making us stop, and organizes our lives without requiring us to be organized people. Because the best productivity system for ADHD isn't one that forces us to change, it's one that adapts to how we already think.
What it does
Kali is a voice-first productivity assistant designed for people with ADHD. Instead of navigating complex calendar interfaces, users simply speak their intent. A user can say "Meeting with Sarah tomorrow at 3pm" and Kali automatically creates the event. By converting natural language into structured calendar operations, Kali eliminates the cognitive friction and executive function overload of manual scheduling. Planning becomes conversational, fast, and intuitive.
How we built it
We built Kali using a modern full-stack architecture designed for reliability and real-time interaction: Frontend: React, Vite, TypeScript, Tailwind Authentication and Database: Firebase Auth and Firestore Backend: Express with TypeScript Speech-to-text: Open-source Whisper running locally AI Parsing: OpenAI API with structured JSON schema enforcement The system pipeline works as follows: Audio is recorded directly in the browser using the MediaRecorder API. The audio file is sent to our Express backend and transcribed using Whisper. The transcript is sent to the OpenAI API, which extracts structured intent using a strict JSON schema. The structured response defines the action type and parameters for creating events, along with title, date, and time. The backend uses this deterministic output to safely perform calendar mutations. We used OpenAI's structured response format with JSON schema validation to ensure machine-readable outputs. This guarantees that natural language is converted into predictable backend operations, making the system reliable enough to automate real calendar actions. Example structured output:
Challenges we ran into
One of our biggest challenges was production deployment architecture. Whisper requires Python and ffmpeg, which cannot run inside standard serverless environments. We had to separate frontend and backend deployment concerns while maintaining secure HTTPS communication for microphone access. We also encountered: Strict TypeScript enforcement during production builds Environment variable injection issues during Vite build time OAuth domain authorization configuration in Firebase CORS handling between Vercel and a locally tunneled backend Audio format conversion from WebM to WAV for Whisper compatibility Ensuring consistent structured JSON output from the OpenAI API Most of the complexity was not in the model itself, but in integrating multiple systems into a stable, production-ready pipeline.
Accomplishments we're proud of
We're a two-person team. One of us has never done a hackathon before in their life. The other has done exactly one. Only one of is a coder and the other is a designer. And yet, in under 24 hours, we built and deployed a fully functional AI-powered voice assistant with real speech recognition, natural language processing, and live calendar integration. We're incredibly proud that we: Went from zero to a working, deployed product that people can actually use Integrated new AI technologies that many experienced developers struggle with Built something genuinely meaningful for people with ADHD, not just another CRUD app Made it work as a tiny team of two Solved real production deployment challenges that would normally require a full engineering team Created a polished, thoughtful user experience despite massive time constraints Most teams at hackathons have more experience, more developers, and more resources. We had none of those advantages. But we had a clear vision, relentless execution, and refused to compromise on building something that actually matters with quality. For a first-time hackathon participant and a designer-developer duo with barely any hackathon experience between us, we didn't just participate, we shipped a complete AI product that works in production. We're proud we proved that ambition and determination can beat experience and resources.
What we learned
We learned that building AI-powered applications is primarily an infrastructure challenge. The model is only one component of a much larger system. Key lessons included: Environment variables in Vite are injected at build time and must exist during production builds. Reliable LLM automation requires strict schema validation rather than free-form text generation. Audio handling on the web requires careful format conversion and HTTPS enforcement. Separating parsing logic from execution logic increases safety and scalability. Deployment stability is critical for AI-driven user experiences. We also learned how deeply user experience design impacts accessibility. Reducing interaction friction can be just as powerful as adding new features.
What's next
We plan to expand Kali into a fully voice-driven calendar control system. Next steps include: Voice-based event deletion such as "Cancel my 3pm meeting tomorrow" Voice-based rescheduling such as "Move my 2pm meeting to Friday at 11am" Automatic syncing directly with Google Calendar instead of requiring manual uploads Persistent Whisper services to reduce latency Conflict detection and intelligent scheduling suggestions Context-aware task prioritization and grouping Our long-term goal is to build a conversational executive function layer that sits on top of existing productivity tools and makes them feel adaptive, supportive, and effortless.
React + TypeScript + Vite
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel (or oxc when used in rolldown-vite) for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
React Compiler
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
Expanding the ESLint configuration
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
Analysis
View
Metric
- 42
- 11
- 6
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- ExpressIn code
- FirebaseIn code
- HTMLIn code
- JavaScriptIn code
- OpenAIIn code
- PythonIn code
- ReactIn code
- Tailwind CSSIn code
- TypeScriptIn code
- Node.jsClaimed
- VercelClaimed
10 of 12 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
- Claude CodeCommits
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
403 KB
Source files
47
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
ShahdAbouhussein/TreeHacks-2026
66 files · 870 KB · @ 6840e8b
Structure
Interface
20 files · 30%Screens, components and styles rendered to the user.
API & routing
7 files · 11%Request entry points: routes, handlers and controllers.
Application logic
24 files · 36%Domain rules, services and shared utilities.
Background jobs
3 files · 5%Work run outside a request: tasks, workers and schedules.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript97%
- CSS2%
- Markdown1%
- HTML0%
- JavaScript0%
- Python0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 28- @base-ui/react
- @fontsource-variable/geist
- class-variance-authority
- clsx
- firebase
- framer-motion
- ical
- lucide-react
- react
- react-dom
- react-use-measure
- shadcn
- tailwind-merge
- tw-animate-css
- +14 more
server/package.json
npm · 16- axios
- cors
- dotenv
- express
- firebase-admin
- multer
- openai
- pdf-parse
- pdf2json
- +7 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.