{"id":50712205,"url":"https://github.com/developerdavid2/kite","last_synced_at":"2026-06-09T16:04:31.110Z","repository":{"id":350951357,"uuid":"1208906881","full_name":"developerdavid2/kite","owner":"developerdavid2","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-21T10:58:47.000Z","size":1276,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-21T12:44:52.125Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/developerdavid2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-12T22:30:39.000Z","updated_at":"2026-04-21T10:58:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/developerdavid2/kite","commit_stats":null,"previous_names":["developerdavid2/kite"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/developerdavid2/kite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/developerdavid2%2Fkite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/developerdavid2%2Fkite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/developerdavid2%2Fkite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/developerdavid2%2Fkite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/developerdavid2","download_url":"https://codeload.github.com/developerdavid2/kite/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/developerdavid2%2Fkite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34114464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-09T16:04:30.067Z","updated_at":"2026-06-09T16:04:31.100Z","avatar_url":"https://github.com/developerdavid2.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Kite — Smart Utility Toolkit\n\nA clean, offline-first mobile utility app built with React Native and Expo. Kite brings together five everyday tools in a single, beautifully designed experience.\n\n## Features\n\n**Unit Converter**\nConvert between length, weight, temperature, and speed units instantly. Real-time conversion as you type with a smooth category picker and swappable unit selector.\n\n**Hydration Tracker**\nSet a personalised daily water goal based on your weight and activity level. Log intake throughout the day, track progress with an animated water bottle visualisation, and review your 7-day history.\n\n**Bill Splitter**\nEnter a bill amount, choose a tip percentage, and split the total across any number of people. Generates a clean receipt-style breakdown instantly.\n\n**Analytics**\nA 7-day hydration history chart built with animated bars. Colour-coded by goal achievement — green for strong days, amber for partial, red for low intake.\n\n**Task Manager**\nCreate, edit, complete, and delete tasks. Persisted locally with SQLite so your list survives app restarts and works fully offline.\n\n---\n\n## Tech Stack\n\n| Technology                   | Purpose                        |\n| ---------------------------- | ------------------------------ |\n| React Native + Expo SDK 54   | Core framework                 |\n| Expo Router v4               | File-based navigation          |\n| NativeWind v4                | Tailwind CSS utility classes   |\n| expo-sqlite                  | Local task persistence         |\n| AsyncStorage                 | Hydration logs and preferences |\n| React Native Reanimated      | Fluid animations               |\n| React Native Gesture Handler | Swipe gestures                 |\n| Plus Jakarta Sans            | Typography                     |\n| TypeScript                   | Strict typing, no `any`        |\n\n---\n\n## Architecture\n\n```\nkite/\n├── app/\n│   ├── _layout.tsx              Root layout — providers, fonts, navigation\n│   ├── onboarding.tsx           3-slide gesture-driven onboarding\n│   ├── tasks.tsx                Full task manager screen\n│   └── (tabs)/\n│       ├── _layout.tsx          Custom tab bar\n│       ├── index.tsx            Home screen\n│       ├── converter.tsx        Unit Converter\n│       ├── hydration.tsx        Hydration Tracker\n│       ├── splitter.tsx         Bill Splitter\n│       └── analytics.tsx        7-day Analytics\n│\n├── components/\n│   ├── shared/                  SafeArea, InputField, PrimaryButton, etc.\n│   ├── converter/               CategoryPicker, UnitSelector, UnitPickerSheet\n│   ├── hydration/               WaterBottle, IntakeLog\n│   ├── splitter/                TipSelector, PeopleCounter, SplitResult\n│   ├── analytics/               BarChart\n│   ├── tasks/                   TaskItem, TaskInput\n│   └── tabs/                    CustomTabBar\n│\n├── context/\n│   └── ThemeContext.tsx          Light/dark mode + navigation bar sync\n│\n├── hooks/\n│   ├── useTheme.ts\n│   ├── useUnitConverter.ts\n│   ├── useHydration.ts\n│   ├── useSplitter.ts\n│   ├── useAnalytics.ts\n│   └── useTasks.ts\n│\n├── utils/\n│   ├── conversionFormulas.ts\n│   ├── hydrationFormulas.ts\n│   ├── splitFormulas.ts\n│   ├── analyticsFormulas.ts\n│   └── taskDatabase.ts          expo-sqlite setup and queries\n│\n├── types/                        All TypeScript interfaces\n└── constants/                    Colors, theme tokens, unit definitions\n```\n\n**Separation of concerns:**\n\n- `app/` — screens only, no business logic\n- `components/` — UI only, no raw calculations\n- `hooks/` — all React state, calls utils\n- `utils/` — pure functions, no React\n- `types/` — single source of truth for all interfaces\n- `constants/` — no magic numbers anywhere in the codebase\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n- Node.js 18+\n- Expo Go app on your Android or iOS device\n- Or Android Studio / Xcode for emulator\n\n### Installation\n\n```bash\ngit clone https://github.com/developerdavid2/kite.git\ncd kite\nnpm install\n```\n\n### Run Locally\n\n```bash\nnpx expo start --clear\n```\n\nScan the QR code with Expo Go on your phone.\n\n---\n\n## Design System\n\nKite uses a monochromatic blue scale with full light and dark mode support.\n\n| Token          | Light     | Dark      |\n| -------------- | --------- | --------- |\n| Background     | `#F5F9FE` | `#040F1E` |\n| Surface        | `#FFFFFF` | `#081E3A` |\n| Primary        | `#2185D5` | `#4A9FE0` |\n| Text Primary   | `#040F1E` | `#E8F4FD` |\n| Text Secondary | `#1A6BB5` | `#7BB8EA` |\n| Border         | `#BAD9F5` | `#144F8A` |\n\nSemantic colors for feedback states:\n\n| State   | Color     |\n| ------- | --------- |\n| Success | `#22C55E` |\n| Warning | `#F59E0B` |\n| Danger  | `#EF4444` |\n| Info    | `#3B82F6` |\n\n---\n\n## Key Implementation Details\n\n### Offline Persistence\n\nTasks are stored in a local SQLite database via `expo-sqlite`. The database is initialised on first app launch and persists across sessions with no network required.\n\n```\nutils/taskDatabase.ts  → all SQL queries\nhooks/useTasks.ts      → React state synced with SQLite\n```\n\nHydration logs are stored per day in AsyncStorage under date-keyed entries (`kite_hydration_logs_YYYY-MM-DD`), preserving 7-day history for analytics.\n\n### Theme System\n\nLight and dark mode respond to system preference on first launch, with a manual toggle that persists via AsyncStorage. The Android navigation bar colour syncs automatically with the active theme via `expo-navigation-bar`.\n\n### Navigation\n\nExpo Router file-based routing with a custom tab bar. The onboarding flow runs once on first launch — completion is tracked in AsyncStorage (`kite_onboarded`). Subsequent launches go directly to the home tab.\n\n### Data Freshness\n\n`useFocusEffect` from Expo Router is used on the Home and Analytics screens to reload data whenever the screen comes into focus — ensuring the task list and hydration chart always reflect the latest state without requiring manual refresh.\n\n---\n\n## Building\n\n### Preview APK (for testing and submission)\n\n```bash\neas build --platform android --profile preview\n```\n\n### Production AAB (for Play Store)\n\n```bash\neas build --platform android --profile production\n```\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeveloperdavid2%2Fkite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeveloperdavid2%2Fkite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeveloperdavid2%2Fkite/lists"}