Topogether is an outdoor climbing app, providing interactive maps of climbing spots and tools for collaborative cartography.
Currently only available in French, sorry!
- React + Next.js
- Tailwind CSS
- Google Maps
- Vercel for hosting the app and API routes
- Supabase, for authentication and a CRUD REST API directly integrated with Postgres
- Postgres as our database, leveraging its awesome authorization and text search features
- PostGIS for geospatial data
- Cloudflare Images for hosting & serving user-uploaded images
- Add topos, both by ourselves & by bringing in more contributors on the platform.
- Get more users to go climbing outdoors with the app (especially when topo downloads become available).
- Work on the offline UI, so it's clear about what is possible or not, based on online / offline status
- Enable the creation of "community tracks" on published boulders.
- Add up/down-voting for grading tracks.
- Add track ratings and comments.
- Moving from Quarky, our awesome handmade reactive system, to
react-easy-state
for state management. Quarky will be rewritten using proxies when we start implementing offline collaboration. - Convert the app to use Remix instead of Next.js, to benefit from nested routing. This will be essential to give each menu a distinct URL, so that the back button works as expected of a native app on mobile.
- Replace Google Maps with Mapbox and MapLibre. OpenStreetMap data is generally better and the open standard for (x,y,z) tiles enables reliable download for offline use and flexibility in our tool choice.
- Deploy as a Node.js app + Postgres database on Fly.io. Subgoals:
- Build our authentication with Passport.js and
express-session
, to enable long offline sessions. - Port our current Postgres database to a self-hosted setup.
- Use Postgraphile to generate a GraphQL API from Postgres.
- Completely remove Supabase.
- Build our authentication with Passport.js and
- Implement single-player offline mode, with topo downloads and offline work. This will be done by hand, just storing full topos in IndexedDB, alongside a "diff tree" to extract exactly the entities that have been created / update / deleted when syncing.
- Start working on offline + collaborative using conflict-free replicated data types.
- Setup auth endpoints that set the Supabase JWT into a cookie and then give it back to the DB
- Convert all Supabase client DB queries into plain SQL (especially getTopo), using postgres-js or Zapatos
- Internationalization
- React Native / Electron versions?
- Move to Solid.js once their
solid-start
framework is out and relatively stable. This will drastically improve performance & battery life.