Wayfarer
Egy Angular 19+-ban írt közösségi fórum oldal ami egy Reddithez hasonló beágyazott komment struktúrával teszi lehetővé, hogy a felhasználók megjegyzéseket hagyjanak egymás posztjai alatt, amiket „járásokba” (kategóriákba) szervezve jelenít meg a főoldal. Minden felhasználó írhat saját kommentet akár az eredeti posztra akár mások válaszaira, lájkolhatják mások kommentjeit vagy létrehozhatnak új posztot a főoldalon, a posztjaikhoz pedig csatolhatnak maximum 9 kép csatolmányt. Mindezt akár bejelentkezés nélkül is megtehetik, ugyanis az oldal felkeresésekor alapvetően mindenki egy megosztott „vendég” fiókba van bejelentkezve és minden alap funkció mindenkinek egyformán elérhető, csak ezzel együtt ez azt is jelenti, hogy bárki könnyedén felülírhatja amit itt csináltál. Bejelentkezett felhasználók írásait azonban csak ők maguk változtathatják meg és a lájkjaikat is csak ők vonhatják vissza. Bejelentkezni Google-os email címmel lehet a jobb felső lebegő gombra kattintva. (Aki bejelentkezik az bekerül az app adatbázisába.)
Ez a projekt valójában két együttműködő projekt egyben (három, hogyha a kép csatolmány szervert is külön beszámoljuk), egy felhasználó oldali frontend ami egy Angular SPA (Single Page Application), és egy szerver oldali backend ami egy Fastify alapú Nest.js keretrendszerben íródott. Ez a két kód két különböző címen került hosztolásra, és a projekt fő kihívása az volt hogy a két oldal sikeresen tudjon sütiken keresztül kommunikálni egymással, nemcsak a CORS védelem ellenében hanem a Vercel sajátos implementációs megoldásait is körbejárva.
A frontend oldal Typescriptet és SCSS stíluslapokat használ, az adatbázis pedig egy helyben tárolt PostgeSQL adatbázis amit a Vercel biztosít.
A kép csatolmányok kezeléséért egy saját Medea nevű projekt a felelős, ami API hívásokon keresztül kommunikál a Wayfarer backend oldalával és a felhasználó által feltöltött képeket egy saját adatbázisban tartja nyílván. (Egész pontosan a workflow úgy néz ki, hogy a Wayfarer frontend oldala feltölti a csatolmányokat a Vercel Blob adattárházba ami pont ilyen adatfájlokra specializálódott, majd szól a Medea-nak hogy másolja fel azokat az ImageKit.io médiakezelő platformra és tartsa számon őket egy saját Postgres adatbázisban, majd az megküldi a feltöltött képek URL-jét a Wayfarer-nek. Vendég felhasználók csatolmányait 30 nap után törli a rendszer és a posztokban csak egy placeholder kép fog megjelenni.)
Github forráskód: https://github.com/FarpadGit/Wayfarer