leosdibella / aciculate

A calendar suite / UI component library / function library built with TypeScript, Node, Webpack, Express, Rust, WASM, Postgres SQL and Native Web Components all running nicely together in Docker

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Aciculate

What even is this?

TL;DR It's a calendar app.

Yeah, but why?

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?

So what all's in here then?

A lot. Most things are built from scratch, just for fun / challenge.

  1. General Purpose + AOP
    1. 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
    2. 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
    3. Backend Logging
    4. Frontend Logging
    5. Database ORM
    6. Frontend Router
    7. Frontend Framework
      • Built on top of Native Web Components
    8. UI Component Library
      • Themeable using CSS variables + public API
    9. 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
    10. Generic JavaScript Utilities
      • Deep Copy
      • Deep Equals
      • Directed Acyclic Graph
      • etc
  2. 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
  3. Logging API
  4. Calendar API
    • Create Calendars within an Organization / or independently of one
    • Create Calendar Events for a given Galendar
    • View Calendars + Calendar Events
  5. Calendar Tiling Algorithm (Consumable as a Library) implemented in
    • TypeScript
    • AssemblyScript -> WASM
    • Rust -> WASM
    • Go -> WASM
    • Possibly others in the future
  6. 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
  7. 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,

  1. Cryptographic stuff
    • Never a good idea
  2. 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
  3. Databse Connections
    • node-postrges is good enough for me
  4. File reading
    • Node utils are good enogh for me
  5. HTTP(S) Server
    • Node + Express are good enough for me
  6. Front End Bundling
    • I like Webpack
  7. Testing
    • I'm happy with Mocha

Things I would have used if I was just trying to build this as quickly as possible,

  1. Invervsify (Dependency Injection)
  2. Vue 3, Angular, React, Svelte (Frontend Framework + Frontend Router)
  3. RxJS
  4. TypeORM
  5. lodash

Perfect Angel Shoutouts

  1. TypeScript
  2. Rust
  3. Go
  4. AssemblyScript
  5. Git
  6. Docker
  7. Node / NPM
  8. VS Code
  9. PostgreSQL
  10. RxJS

About

A calendar suite / UI component library / function library built with TypeScript, Node, Webpack, Express, Rust, WASM, Postgres SQL and Native Web Components all running nicely together in Docker

License:MIT License


Languages

Language:TypeScript 86.5%Language:Rust 11.3%Language:JavaScript 1.3%Language:Dockerfile 0.4%Language:Shell 0.3%Language:HTML 0.2%Language:Go 0.0%