TL;DR It's a calendar app.
Years ago I designed an algorithm to tile appointments on a calendar in an aesthetic way, well I'm implementing it in Rust now and compiling to WASM. Figured I'd make a nice monorepo for everything, and build out some other nicities I've always wanted to implement myself in TypeScript. May also implement the solution in Go and AssemnlyScript just as a fun exercise to compare WASM execution times cause why not?
A lot. Most things are built from scratch, just for fun / challenge.
- General Purpose + AOP
- Obelisk - A Dependency Injection Framework
- Using decorators + reflect-metadata to mark dependencies with Symbol tokens
- Build a Directed Acyclic Graph based on the dependency chain and topologically sort it
- Construct the depdency chain from the bottom up
- Backend HTTP Controller Framework
- Using decorators + reflect-metadata + Depdendency Injection Framework
- Consumes an HTTP Context
- HTTP Request object
- A method for creating an HTTP Response
- Backend Logging
- Frontend Logging
- Database ORM
- Frontend Router
- Frontend Framework
- Built on top of Native Web Components
- UI Component Library
- Themeable using CSS variables + public API
- Ouroboros - A custom JSON Serializer / Deserialize
- Supports Native Date Objects
- Supports shallow references (including circular references)
- Supports BigInt
- Supports NaN
- Supports Infinity / -Infinity
- Supports undefined
- Generic JavaScript Utilities
- Deep Copy
- Deep Equals
- Directed Acyclic Graph
- etc
- Obelisk - A Dependency Injection Framework
- Authentication API
- Signs JWTs with a secret per user
- Tokens can be revoked at the followings levels
- Application Level (e.g. All Users)
- Organization Level (e.g. All Users within an Organization)
- User Level (e.g. A single User)
- Token lifetime configurable through Enviornment Variable
ACICULATE_API_TOKEN_LIFESPAN_MINUTES
- Create / Manage Users
- Create / Manage Organizations
- Manage Users and their Role within an Organization
- Logging API
- Calendar API
- Create Calendars within an Organization / or independently of one
- Create Calendar Events for a given Galendar
- View Calendars + Calendar Events
- Calendar Tiling Algorithm (Consumable as a Library) implemented in
- TypeScript
- AssemblyScript -> WASM
- Rust -> WASM
- Go -> WASM
- Possibly others in the future
- Calendar UI Component Library
- Consumes the various outputs of the Calendar Tiling Algorithm allowing runtime comparison
- Uses Frontend Framework to create intricate Calendar Components
- Single User view
- Multi-user week view (three-day, full week, work week)
- Month View
- Year View
- Themeable using CSS variables + public API
- Calendar App
- Uses the Calendar UI Component Library
- Uses Frontend Framework
- Interacts with Authentication API, Calendar API and Logging API
Though there are a few things I opted to leave well enough alone on, those include,
- Cryptographic stuff
- Never a good idea
- Database
- PostgreSQL is a perfect angel, even if it's a little big for this task
- Some other time I might make my own document style DB or something
- Databse Connections
- node-postrges is good enough for me
- File reading
- Node utils are good enogh for me
- HTTP(S) Server
- Node + Express are good enough for me
- Front End Bundling
- I like Webpack
- Testing
- I'm happy with Mocha
Things I would have used if I was just trying to build this as quickly as possible,
- Invervsify (Dependency Injection)
- Vue 3, Angular, React, Svelte (Frontend Framework + Frontend Router)
- RxJS
- TypeORM
- lodash
- TypeScript
- Rust
- Go
- AssemblyScript
- Git
- Docker
- Node / NPM
- VS Code
- PostgreSQL
- RxJS