A massive thank you to all the creators, developers, and artists who made the assets that power this website.
| item | type | used |
|---|---|---|
| neocities - free hosting platform |
Host | / |
| firebase - real-time db & auth |
JS/DB | /index /letters |
| neocities api - site statistics |
API | /index |
| catbox / litterbox api - anonymous image hosting |
API | /letters |
| ipify api - public ip fetcher |
API | /index /letters |
| rainy hearts - primary pixel font |
Font | / |
| silkscreen - retro header font |
Font | /index /resources |
| kalam - handwriting font |
Font | /letters |
| win98 cursors - retro pointers |
CSS | / |
| font awesome - scalable vector icons |
CSS | / |
| css masonry grid - brick-style layout |
CSS | /resources |
0oxo0 - my main inspiration to start a neocities site and the spark for this entire digital aesthetic! ✨
Loor (azachi.nekoweb.org) - my specific inspiration for this resources page layout. the window aesthetic and tables are top tier.
Modern HTML5 Music Player - my own custom music player script, originally inspired by classic winamp clones and retro web audio players.
Windows 98 OS - the general aesthetic for the terminal windows, draggable elements, and classic UI borders.
::before pseudo-element fixed over the viewport with pointer-events: none. the lines are drawn using a repeating-linear-gradient, and an infinite @keyframes animation translates it downwards to simulate a screen refresh.
Web Audio API. it connects the html media element to an AnalyserNode, extracting live frequency data. a requestAnimationFrame loop then calculates the frequencies and draws the glowing pink/blue bars onto an HTML5 <canvas>.
onSnapshot() method. instead of constantly pinging the server (polling), the browser holds an open websocket connection, and Firebase instantly pushes new messages to the screen as soon as they are added.
Ipify API to get your public IP address when you post. if your current browser IP matches the IP saved on a message in the database, the UI grants you permission to reveal the 'delete' and 'edit' buttons.
column-count: 2 property to create the uneven brick-laying effect. the terminal panels themselves use break-inside: avoid so they cleanly stack without being sliced in half across two columns.
FormData object and using fetch() to POST it directly to the Catbox/Litterbox API. the API returns a raw image URL, which is then dynamically parsed into custom Markdown inside the text area.