/app

All the code that runs cubeclubs.nz, a website that brings seven non-profit local speedcubing clubs in New Zealand.

Primary LanguageSvelteGNU Affero General Public License v3.0AGPL-3.0

CubeClubs NZ App

This repo contains the code that runs the new cubeclubs.nz. You can view the site here.

Info

  • Built with SvelteKit and uses Prisma + Kysely with PostgreSQL for the backend

  • The user interface and all components used are written from scratch. No templates are used.

  • This project addresses the countless issues with the original poorly written site, adds new features and improves the overall user experience.

  • The new schema has been completely rewritten: it stores around 70% less data compared to the original.

  • Migration scripts can be viewed here.


Contributing

CubeClubs NZ is GPLv3 licensed.

If you want to help out, please view our contributing guide.


Screenshots

image

Project Structure

cubeclubs
├── prisma
│   └── schema.prisma 		 (the database schema) 
├── scripts
│   └── ... 		         (some scripts to reduce size of fonts) 
├── src
│   ├── app.d.ts
│   ├── app.html
│   ├── lib
│   │   ├── assets 		 (icons, logos, etc) 
│   │   │   ├── ...
│   │   ├── components 		 (custom svelte components, eg buttons, forms etc) 
│   │   │   ├── ...
│   │   ├── data 		 (convenient data to work with backend) 
│   │   │   ├── ...
│   │   ├── db 		         (Kysely configuration and files) 
│   │   │   ├── ...
│   │   ├── prisma.ts 		 (initialises the prisma client) 
│   │   ├── utils.ts 	         (universal utility functions) 
│   │   └── utilsServer.ts 	 (server utility functions) 
│   ├── routes
│   │   ├── (admin) 		 (protected admin routes, dashboard) 
│   │   │   ├── dashboard
│   │   │   │   ├── ...
│   │   ├── (app) 		 (the primary app, inherits root layout with tab bar) 
│   │   │   ├── ...
│   │   └── (auth) 		 (login, signup, recover-account and logout routes) 
│   │       ├── ...
│   └── styles 			 (all styles used throughout the app, imported by root layout + grouped layouts) 
│       ├── components.css 	 ├── (for components, eg tables, inputs etc)
│       └── globals.css 	 └── (defines global css variables, sets colours, fonts, etc)
└── static			 (static resources, favicon, landing page assets)