A delightful and minimal personal task manager built with React and Firebase. Ticky lets you create lists, add tasks, set due dates, and jot down notes, helping you stay organized without the clutter. It’s fast, simple, and designed to feel like a digital extension of your notebook.
- 📝 Create, edit, and delete tasks
- 📁 Create, edit, and delete lists
- 👀 View task details by clicking on the ellipsis icon (hover on desktop, always visible on mobile)
- ➕ Quick-add tasks from the header or open the detailed add modal (title, notes, due date, list)
- ✅ Mark tasks as complete
- 📊 View stats for each list (all / remaining / completed)
- 🔍 Filter tasks by list or show all tasks
- 🗓️ Tasks are automatically sorted by due date, with completed tasks moved to the bottom.
- 🌗 Toggle light/dark theme, saved in local storage
- React Hooks —
useState,useEffect, anduseContextto handle UI state and logic - Context + Provider pattern —
ModalProvider,ListProvider,TaskProvider, andThemeProviderfor global data sharing (no prop drilling) - Reusable components — small, flexible components that make the app easy to maintain and extend
- Modal composition — one dynamic
<Modal />that renders different kinds of content - Data mapping & normalization — Firestore data (tasks/lists) mapped into type-safe, consistent shapes; normalized
listIds, formatted dates, etc. - Firebase Firestore — CRUD operations, queries, and managing
DocumentReferencevs string IDs - CSS variables + modules — for theme tokens, scoped styles, and consistent design throughout the app
- React (Vite)
- Firebase Firestore
- CSS Modules + CSS Variables
Firebase setup (local)
- Create a Firebase project at https://console.firebase.google.com/ and enable Firestore.
- Create a Web app in your Firebase project and copy the config values.
- In the project root create a
.env.localfile (this file is ignored by git). - Add the Vite-style keys (example names provided in
.env.example):
Run
- Install dependencies
npm install
- Start the dev server
npm run dev
Then open http://localhost:5173 (or whatever Vite shows in your terminal).
This is a personal side project made for fun and learning purposes.
Built by Jacob Asker









