Projects

AI Projects

Experiments, tools, and odd little builds โ€” all with a cat-shaped sense of humor.

๐ŸŒ€

Generative Drift

Live, ever-shifting visuals tuned to ambient synth.

Generative Art
โ–ผ

A self-contained audio-visual toy: the music is synthesized live in your browser with the Web Audio API โ€” there is no audio file. An FFT analyser reads that sound in real time and drives every pixel of the cat.

  • Synthesized live โ€” an upbeat four-on-the-floor groove generated entirely in code with the Web Audio API; there is no audio file, every kick, bass note, and melody is produced at playback.
  • Warps & morphs to the beat โ€” an SVG turbulence + displacement filter liquifies the cat, distorting harder on every kick.
  • Reactive everything โ€” pulsing glow ring, spinning color field, and beat-driven hue shifts, all tied to the live mix.
  • Zero assets โ€” no audio or video files; the sound and motion are 100% code.
Panda Cat portrait

Tap play โ€” the cat pulses to a live, generative beat synthesized in your browser.

Open the full experience โ†’
๐Ÿงต

Tapestry Generator

Weaves the gallery art into psychedelic kaleidoscopes.

Generative Art
โ–ผ

An in-browser generator that pulls a random piece from the gallery and weaves it into a seamless, symmetric tapestry โ€” then lets you grade it into something properly psychedelic and download it.

  • Kaleidoscopic symmetry โ€” 4-, 6-, 8-, or 12-fold mirrored wedges, tiled with mirrored neighbours so the weave is seamless.
  • Live colour grade โ€” hue, vibrance, and a shimmer mode push it into psychedelic territory.
  • Sourced from the gallery โ€” every generate draws a new piece; the whole thing runs in your browser.
  • Download โ€” export your tapestry as a high-res PNG.
Open the generator โ†’
๐ŸŒŒ

Dark Room

An ambient space with live sound and drifting quotes.

Generative Art
โ–ผ

A quiet, full-screen ambient experience โ€” click to enter and let it drift. The soundscape is synthesized live in your browser, with no audio file.

  • Live ambient audio โ€” slow oscillators and an LFO generate an evolving drone entirely in code.
  • Animated canvas โ€” a soft, breathing visual field rendered frame by frame.
  • Drifting quotes โ€” fragments fade in and out as you sit with it.
  • Zero assets โ€” sound and motion are 100% code.
Enter the dark room โ†’
๐Ÿš€

Automated Website Upload

Encrypted deploy that pushes local edits live instantly.

Automation
โ–ผ

A Python script that pushes every changed file from the local folder to the live site over an encrypted TLS 1.3 connection. One command, no manual steps.

1

The site is edited locally.

2

One command kicks off the deploy.

3

It builds, obfuscates, connects over TLS, and the site is live โ€” usually under 10 seconds.

๐Ÿ”’Every byte travels over TLS 1.3 (AES-256-GCM) โ€” credentials and files are never sent in cleartext.
๐Ÿ—๏ธThe password is never stored in plaintext. It is encrypted at rest with the OS keystore (Windows DPAPI) and decrypted only in memory at deploy time.
๐ŸงนOnly the built, obfuscated site ships โ€” the deploy auto-skips the script, config, and backups.
๐Ÿ”’

Encrypted Chat

End-to-end encrypted rooms โ€” no accounts, no logs.

Security
โ–ผ

Private chat rooms where every message is encrypted in your browser before it ever touches the network. The server only ever stores ciphertext โ€” it cannot read a single word.

  • AES-256-GCM end-to-end โ€” the key is derived in your browser from the room name and an optional passphrase; the server never sees it.
  • No accounts, no IP logging โ€” pick a handle and go; nothing identifying is stored.
  • Room names are hashed โ€” the backend stores a one-way hash, never the plaintext room name.
  • Ephemeral โ€” messages auto-expire, and a key fingerprint lets both sides verify they share the same key.
Open the chat โ†’
๐Ÿ“ฆ

Anonymous Drop

Zero-knowledge file sharing that self-deletes in 24h.

Security
โ–ผ

Drop a file, get a link. The file is encrypted in your browser first; the decryption key lives only in the link's # fragment and is never sent to the server. The server stores nothing but opaque ciphertext.

  • Zero-knowledge โ€” filename, type, and contents are all encrypted client-side; the server can't read any of it.
  • Up to 300 MB โ€” uploads are chunked so large files transfer reliably.
  • Self-deletes in 24h โ€” every drop expires automatically; nothing lingers.
  • Hardened โ€” unguessable links, size and download caps, and stored blobs are never executed or served inline.
Open the drop โ†’
๐Ÿ“

Encrypted Paste

Zero-knowledge text sharing with burn-after-read.

Security
โ–ผ

Paste text or code, get a link. Itโ€™s encrypted in your browser first; the key lives only in the linkโ€™s # fragment and never reaches the server, which stores nothing but ciphertext.

  • Zero-knowledge โ€” AES-256-GCM in the browser; the server canโ€™t read the paste.
  • Burn after reading โ€” optionally destroy the paste the moment itโ€™s first opened.
  • Expires in 24h โ€” everything self-deletes automatically.
  • Shared hardened backend โ€” same unguessable-ID, capped, never-executed storage as the file drop.
Open the paste tool โ†’
๐Ÿ“จ

Disposable Email

Anonymous inbox that self-destructs in 24 hours.

Security
โ–ผ

Get a random throwaway email address, use it to sign up for anything, and let it vanish. No account, no personal info โ€” and the whole address self-deletes after a day.

  • Anonymous โ€” no signup, no IP logging; a fresh random address on demand, with a QR code for mobile.
  • Self-destructs โ€” pick a 1h, 6h, or 24h lifetime, or burn the inbox instantly; the address and its mail are then purged.
  • Anti-tracking โ€” messages are shown as plain text with remote images and scripts stripped, so tracking pixels canโ€™t fire.
  • Optional PGP โ€” generate an ephemeral key in your browser; mail a sender encrypts to it is end-to-end encrypted, decrypted only in your browser.
  • Honest scope โ€” receive-only; plain email isnโ€™t end-to-end encrypted (inbound SMTP is plaintext), so without PGP it isnโ€™t zero-knowledge like the chat and file drop.
Open temp mail โ†’
๐Ÿ—ฃ๏ธ

Anonymous Forum

A message board with no accounts and no IP logs.

Community
โ–ผ

A privacy-first message board where you post without ever making an account. Pick a handle, or don't โ€” either way nothing identifying is kept. It comes in two flavours: public boards anyone can read, and encrypted boards only you and your passphrase can open.

  • No accounts, no IP logging โ€” you just start typing; nothing that points back to you gets stored.
  • Optional tripcodes โ€” add a secret to your handle (name#secret) to prove a post is really you across visits, still with no account behind it.
  • IP-free rate limiting โ€” abuse throttling uses one-way HMAC buckets that store no IP address, so speed limits work without a log of who you are.
  • Public boards โ€” posts are plaintext and moderated by a server-side word filter; these are the ones listed on the front page.
  • Encrypted boards are zero-knowledge โ€” the board id and key are derived in your browser from a board name plus a passphrase; the server only ever holds ciphertext and can't read or moderate them.
๐Ÿ™ˆEncrypted boards are hidden from the public listing โ€” if you don't know the exact name and passphrase, you can't even see one exists.
๐Ÿ•Timestamps are coarsened to the hour, so posts can't be fingerprinted by the second.
Open the forum โ†’
๐Ÿ”

Checksum Verifier

Hash a file locally and compare โ€” fully offline.

Security
โ–ผ

Drop in a file to compute its SHA-256, SHA-512, and SHA-1 and check it against an expected value โ€” handy for confirming a download wasnโ€™t tampered with.

  • Runs entirely in your browser โ€” Web Crypto hashing, nothing is uploaded.
  • Provably offline โ€” the page ships a connect-src 'none' policy, so it physically cannot make a network request.
  • Instant compare โ€” paste an expected hash and get a match / no-match verdict against any of the three algorithms.
Open the verifier โ†’
๐Ÿ›ก๏ธ

Security Contact

Report a bug โ€” encrypted before it leaves your browser.

Security
โ–ผ

Found a hole in one of these dens? A coordinated disclosure page where you write up the bug and it is encrypted in your browser to a key only the operator holds โ€” then you email the ciphertext. Nobody in between can read a word of it.

  • PGP-encrypted in your browser โ€” the report is sealed client-side with OpenPGP to the operator's public key; the plaintext never leaves your device.
  • RSA-4096 disclosure key โ€” reports are encrypted to a 4096-bit public key that only the operator's private key can open.
  • Report body is end-to-end encrypted โ€” you email ciphertext, so even though email transport isn't private, the contents are only ever readable by the operator.
  • Auto-discovered public key โ€” the browser pulls the operator's key from the standardized /.well-known/ location; you can also paste one in yourself.
  • Operator tools stay local โ€” the built-in keypair generator and report decryptor run entirely in-browser; the private key and its passphrase never leave the page.
๐Ÿ“œCoordinated, good-faith disclosure โ€” report privately, get reasonable time to fix, credit gladly given.
๐ŸšซNo accounts and nothing identifying is required โ€” just write, encrypt, and send.
Report a vulnerability โ†’
๐ŸŽต

Panda Lyrics

A synced-lyrics desktop widget with a mischievous cat.

Desktop
โ–ผ

A compact Windows 11 desktop widget that follows whatever is playing in the TIDAL desktop app and shows line-synchronized lyrics โ€” the previous, current, and next line drifting past in time with the song. It is built in C# on .NET 10 (WPF), reads the now-playing track through Windows' own media controls, and pulls timed lyrics from the community LRCLIB database. It runs entirely on your own machine.

  • Reads the song, not your files โ€” title, artist, playback position, and album art come from Windows' Global System Media Transport Controls; the widget extrapolates the playhead while music plays and re-anchors whenever the timeline jumps.
  • Whole-window kinetic themes โ€” the lyric style switches the entire surface at once (typography, tint, border, album frame, glow, and particle palette), backed by optional particle fields and a low-key etched PANDACAT header mark.
  • Honest audio reactivity โ€” the visualizer moves to a single normalized loudness value read only from TIDAL's own audio session; it carries no frequency bands and never claims to measure bass, and it keeps a calm resting shape during real silence instead of inventing energy.
  • A cat lives here โ€” a dependency-free, green-eyed vector cat walks the widget's edge and, if you let it, goes on occasional desktop adventures: chasing a butterfly across a cloud, hitching a ride on a little biplane, or being caught by a portal when you fling the window around.
  • Considerate by default โ€” it honors Windows reduced-motion and High Contrast, settling into a static pose and stripping decoration; the cat and text scale to taste, and every choice is remembered between launches.
๐ŸŽ™๏ธNo microphone, loopback recording, or FFT โ€” the meter is one loudness scalar from the media session, and lyrics live only in memory for the current track.
๐Ÿ–ผ๏ธAlbum art is taken solely from the Windows media session and never sent anywhere; only the community lyrics service is ever contacted, for lyrics alone.
๐ŸพAn independent project โ€” not affiliated with TIDAL or LRCLIB โ€” installed per user with no administrator rights.
๐ŸŽจ

Panda Art Showcase

A music-mapped psychedelic gallery that turns a picture folder into a living visual set.

Desktop
โ–ผ

A Windows desktop gallery for presenting a folder of artwork as a fluid, music-responsive slideshow. Point it at a directory โ€” subfolders included โ€” and the current image becomes a continuously moving canvas: pixels flow, color channels bloom, the frame breathes and drifts, and musical ripples travel through the composition. It targets a smooth 60 FPS and can sit in a compact snap-friendly window or expand into a full-screen visual installation.

  • Motion with a real visual vocabulary โ€” five live controls separate liquid flow, animation tempo, color travel, musical pulse, and whole-picture drift. Mellow, Dreamy, and Expressive presets make the range approachable, while Custom mode exposes the full shader without turning ordinary settings into a strobe.
  • Mapped to the song โ€” when TIDAL is playing, the app estimates tempo and follows verified playback energy, onsets, sustained passages, and song position. It gradually builds a local per-song motion map, then reuses that beat grid after a seek or on a later listen while continuing to refine sections it has actually heard.
  • True-color text art โ€” an optional Chafa-inspired mode reconstructs each picture from real ASCII glyph shapes with independent foreground and background colors, then sends that textual image through the same warping, crossfade, hue, and music-motion pipeline. The fixed-width grid can be copied raw or wrapped for Markdown.
  • A gallery, not a format fight โ€” it walks nested folders and accepts AVIF, BMP, GIF, HEIC/HEIF, JPEG, PNG, TIFF, and WebP whenever the matching Windows codec is installed. Previous, next, pause, motion, ASCII, and fullscreen controls stay deliberately compact so the artwork keeps the room.
  • Panda Lyrics built into the frame โ€” a dedicated lower strip shows Windows-provided album art, track and artist, the emphasized current lyric, the next lyric, BPM, mapping progress, and the same restrained TIDAL pulse used by the standalone widget.
๐ŸŽงThe audio meter reads only one normalized peak scalar from verified TIDAL sessions. It never records audio samples, captures loopback sound, asks for TIDAL credentials, or pretends that a whole-mix value is a frequency analysis.
๐Ÿง Song maps store derived timing and energy numbers only โ€” no audio buffers, listening-history service, or cloud account. If TIDAL is absent, the art simply keeps a gentle autonomous drift.
๐Ÿ–ฅ๏ธWindow size, position, motion choices, and text mode are remembered locally, with ordinary resize behavior and a one-key fullscreen escape.
๐Ÿ•น๏ธ

Pagan Reborn

A clean-room engine remake of a 1994 classic, in Rust.

Games
โ–ผ

A ground-up, open-source reimplementation of the Ultima 8: Pagan game engine in Rust โ€” in the spirit of OpenMW and Exult. Modern rendering, widescreen, a smooth framerate; the original world, story, and mechanics. It ships no game assets whatsoever โ€” it reads the data from your own legally-owned copy and extracts everything locally.

  • Bring your own copy โ€” the engine parses the original files from your install; generated art and audio land in a gitignored folder that is never committed or shared.
  • Hand-written parsers, no unsafe โ€” the file-format decoders are pure safe Rust, so a whole class of memory-corruption bugs simply cannot happen.
  • Hardened against hostile data โ€” parsers return errors instead of crashing, with fuzz-style tests proving they never panic on malformed or garbage input.
  • Clean-room lineage โ€” the formats were documented from public open-source references, then reimplemented from those specs and released under the GPL.
  • In active development โ€” the extraction toolchain and art pipeline are done and verified; world rendering is the next milestone. Not yet a playable game โ€” but the engine is being built in the open.
๐ŸšซZero bundled assets โ€” the project distributes engine code only, never a single frame of copyrighted content.
๐ŸพEvery file-format spec was re-verified claim-by-claim against the real data files before a parser was trusted.
๐ŸŽฎ

Crusader Reborn

An open-source new engine for a 1995 classic.

Games
โ–ผ

A ground-up, open-source engine reimplementation of Crusader: No Remorse (Origin Systems, 1995), written in Rust. Same idea as OpenMW, Exult, and devilutionX: a brand-new engine that reads the original game's data from your own legally-owned copy. This one is early โ€” in active development, so it's more workshop than playground right now.

  • Ships zero game assets โ€” the repository is original code only; you bring your own copy, and everything the tools extract stays in a local, git-ignored folder.
  • Hardened data parsers โ€” the format readers use no unsafe Rust and are built to never panic on malformed or corrupted input, with fuzz-style robustness tests.
  • Clean-room lineage โ€” file formats are documented from a study of an open-source reference engine plus real game files; the Rust code is written from those specs, then adversarially re-verified claim by claim.
  • The goal โ€” the original missions, story, and mechanics preserved exactly, with modernized presentation and an optional modern control scheme layered on top of a faithful classic mode.

Where it is right now

The toolchain and asset-extraction pipeline are working โ€” a full-corpus extraction run completed with zero decode errors. The Bevy-based asset viewer is the next milestone and the gate out of the current phase. Rendering, controls, and the game simulation itself are still ahead on the roadmap โ€” no promises the cat can't keep.

๐Ÿ—„๏ธ

PandaVault

An offline password manager and encrypted vault, in Rust.

Security
โ–ผ

A local, offline vault for Windows and Linux that keeps two things in one application: a password manager โ€” usernames, passwords, passphrase generation, secure notes, and live TOTP codes โ€” and an encrypted data vault for images, video, and arbitrary files. The whole store is a single portable encrypted file you control: no account, no cloud, no telemetry, no network client. It is written in Rust and is pre-release โ€” a workshop project under active security-debugging, not something to trust with real secrets yet.

  • Established crypto, not hand-rolled โ€” Argon2id key derivation and XChaCha20-Poly1305 authenticated encryption from the vetted RustCrypto and dalek libraries, with the entire vault header authenticated so a parameter-downgrade attempt simply fails to decrypt.
  • Layered unlock โ€” the master password can be combined with an optional keyfile and an optional hybrid X25519 + ML-KEM-1024 identity file, mixing a classical and a post-quantum secret so the extra factor rests on neither alone.
  • Every imported file is treated as hostile โ€” images, archives, and video are decoded in disposable, out-of-process workers that hold no vault keys, over a framed protocol with strict size and geometry bounds, parent-side revalidation, and watchdogs that kill anything that stalls.
  • Media stays sealed โ€” each file lives in its own chunked, streaming-encrypted sidecar under a unique per-file key, and supported media is viewed straight from RAM without ever landing in the clear on disk.
  • Panic and auto-lock โ€” a panic hotkey locks the vault, zeroizes keys, and clears the clipboard; a dead-man timer locks on idle, session-lock, or suspend; and root secrets sit in guarded, page-locked memory that wipes on drop.
  • Tamper-evident history โ€” a keyed hash-chain audit log anchored inside the encrypted vault, with a forward-secure per-entry ratchet, so committed history cannot be silently rewritten or rolled back.
๐ŸšซNo sync, autofill, browser extension, mobile app, or cloud recovery โ€” a deliberately small attack surface, at the cost of managing your own backups.
๐ŸชŸOn Windows the media decoder runs in an attested, zero-capability sandbox and fails closed if that sandbox can't be verified; the release build is byte-for-byte reproducible.
๐ŸพClaims are kept matched to the code โ€” where a control is best-effort or platform-specific, it says so plainly.

Where it is right now

The cryptography, vault format, memory hardening, and out-of-process decoding all work today, with a large adversarial test suite proving that malformed vaults and hostile files fail closed. A release is deliberately gated on moving every untrusted parser into fresh, hardware-isolated sandboxes on both platforms โ€” that pipeline is designed but not built yet โ€” so this is shared as serious work in progress, not a finished product.

๐Ÿงฉ

PandaSOS

A security substrate, still on the drawing board.

Systems
โ–ผ

A research and design effort โ€” not a shipping product yet. PandaSOS is a Rust security substrate that would sit between applications and the operating system, deciding what an app is allowed to do from capability-based policy, enforcing that at the OS boundary, and leaving tamper-evident evidence of every decision. Right now it exists as an architecture and a formal specification; no implementation has shipped.

  • Design stage, stated plainly โ€” the specification is written and the crate layout is planned, but essentially the whole system is still conceptual; there is no running code yet.
  • Rides on your existing OS โ€” it is deliberately not a new kernel, hypervisor, antivirus, or blockchain. It is meant to mediate execution on top of Linux and Windows rather than replace them.
  • Capabilities, not ambient trust โ€” the design binds each capability to the hardware page table, so a permission is enforced by the MMU and privilege escalation would require compromising the kernel itself.
  • A tiny trusted core โ€” a framekernel discipline is designed to confine all unsafe Rust to a single small kernel crate, leaving every other crate as ordinary safe Rust and shrinking the trusted computing base.
  • Built to be proven, not just tested โ€” the goal is machine-checked correctness: a formal state machine, capability rules, and a breach-probability bound expressed as proof obligations for tools like TLA+ and Verus.
๐Ÿ“œEvery decision is designed to be logged to a hash-chained, cryptographically signed event ledger, so an audit trail cannot be silently rewritten.
๐Ÿค–Any AI component is treated as an untrusted oracle โ€” it may only propose; the trusted core re-checks and can reject, never granting it authority over state.

An honest snapshot: this is the ambitious end of the workshop โ€” a substrate we are still designing and reasoning about, shared here as work in progress rather than something you can run today.

๐Ÿพ

This Website

pandacat.vip โ€” a hand-built, hardened, audio-reactive static site.

Web
โ–ผ

Every page is hand-written and ships as static files โ€” no build framework, no analytics, no tracking, and zero third-party requests: even the fonts are self-hosted, so the whole site loads only from its own origin. The interactive tools (chat, file drop) are backed by small, hardened, same-origin endpoints that only ever see encrypted data.

~285KB
homepage (html+css+js)
0
homepage image requests*
11
static pages
TLS 1.3
every byte

*on the homepage all artwork is embedded inline as base64, so the page itself makes no extra image requests.

Security hardening

๐Ÿ›ก๏ธStrict Content-Security-Policy โ€” no unsafe-inline, no unsafe-eval; all script and style is external and self-hosted.
๐Ÿ”HSTS preload with forced HTTPS โ€” browsers refuse to load it over plain HTTP.
๐Ÿšซnosniff, frame-ancestors, a locked-down Permissions-Policy (camera/mic/geo off), and no directory listing.
๐ŸงฌAll JavaScript is obfuscated at build time.
๐Ÿ”—Scripts and styles ship with content-hashed URLs โ€” each change gets a new fingerprint, so updates go live instantly and visitors never run a stale cached file.
๐ŸŒZero third-party requests โ€” fonts are self-hosted, so no external service ever sees a visitor's IP or browser.
๐Ÿ”Subresource Integrity โ€” every script and stylesheet carries a sha384 hash, so the browser refuses to run a tampered or corrupted file.
๐Ÿ“ŠPrivacy-preserving rate limiting โ€” abuse is throttled with one-way, daily-rotating HMAC buckets that store no IP address.
๐ŸชชTools add hash-based touches: tripcodes (prove identity without an account), identicons, and tamper-evident HMAC integrity seals on stored files.

Under the hood

  • The ambient music is synthesized live with the Web Audio API and the visuals are audio-reactive โ€” no audio files; sound and motion are pure code.
  • The interactive tools all run in the browser: the tapestry and dark room are fully client-side, the gallery streams its (public) art on demand, and the chat and file drop are end-to-end encrypted โ€” their backends only ever store ciphertext.
  • Mobile visitors get a separate, hand-tuned layout.
  • Deploys run over an encrypted TLS 1.3 connection, publishing only obfuscated, content-hashed output.