Fast fully keyboard driven todo app with GitHub integration and AI features
It's an extension to Learn Anything. The goal is to make the best task manager. It uses the same database that LA is using.
- File structure - make sense of how code is laid out in the repo
- Setup - get started with development
- Run server
- Run web
- Mobile apps
- Contribute - contribute to project effectively
- Docs
Ask questions on Discord if interested in developing the project or you get issues with setup.
Everything below needs to be updated.
Tech stack is described in docs/tech-stack.md.
- grafbase - Grafbase provides GraphQL API layer to talk with DB
- schema.graphql - GraphQL schema with models + resolvers defined
- resolvers - custom resolvers (functions) to run custom logic exposed via GraphQL
- src - code for website built with Solid (on top of Solid Start starter)
- GlobalContext
- store.tsx - global state (store's signals defined then exposed via context)
- todos.ts - Defines
todosState
which exposes a store of todos. When first run, loads todos signal with data from grafbase, can then modify the store via exposed methods and it sends mutations to grafbase in background for persistance. There are more stores, each store is synced with Grafbase where needed. The goal is to keep state management local. Polling to be added later.
- components - solid components
- graphql - GraphQL utils
- lib - generic utils
- pages - components for pages inside the app
- routes - routes defined using file system
- GlobalContext
- src-tauri - Tauri rust code that makes the desktop app, in future will use SQLite (or something else) to setup local caching in the app. Maybe with some CRDTs mixed in.
Everything is driven using pnpm commands as part of monorepo setup using pnpm workspaces.
First run:
pnpm i
TODO:
pnpm dev-setup
should create .env variables with default env
Before running the app, you need to setup up some environment variables.
Create new file .env
at root of project with this content:
VITE_HANKO_API=https://e879ccc9-285e-49d3-b37e-b569f0db4035.hanko.io
VITE_GRAFBASE_API_URL=http://127.0.0.1:4000/graphql
VITE_TINYBIRD_API_KEY=
Above Hanko API uses LA's staging auth setup. You can create your own new project at hanko.io and fill it with own API value. Set App URL to http://localhost:3000.
Create new file at grafbase/.env
with this content:
GRAFBASE_API_URL=http://127.0.0.1:4000/graphql
HANKO_API_ENDPOINT=https://e879ccc9-285e-49d3-b37e-b569f0db4035.hanko.io/.well-known/jwks.json
UPSTASH_REDIS_REST_URL=
UPSTASH_REDIS_REST_TOKEN=
OPENAI_API_KEY=
TINYBIRD_API_KEY=
Upstash Redis URL/Token can be gotten by creating new project in Upstash Console.
Can use your own OpenAI key. Get it from here.
Tinybird is used for analytics. Can get the key for it in dashboard.
npx grafbase@latest dev
Open http://localhost:4000 for GraphQL playground. Read Grafbase getting started to get familiar.
pnpm dev
Then go to http://localhost:3000/, it renders route defined at src/routes/index.tsx.
If signed in (there is valid token stored in cookie), it shows the app, otherwise the landing page.
Check mobile
The tasks to do are outlined in GitHub issues and in todo.md (sorted by priority).
If issue/idea you have is not there, open new issue or start discussion.
Any PR with code/doc improvements is welcome. ✨
Join Discord for more indepth discussions.
All docs can be seen in docs.
Always open to useful ideas or fixes in form of issues or PRs.
Can open new issue (search existing issues first) or start discussion.
It's okay to submit draft PR as you can get help along the way to make it merge ready.