I build systems where the interesting part is a constraint you have to design around, rather than a feature you have to add — a server that must not be able to cheat, a pipeline that must survive being run twice, a tool that has to be honest about what it doesn't know.
Encrypt a message that nobody can open until a chosen time — not the recipient, not the server, not me.
Messages are encrypted to a future drand round number using Identity-Based Encryption on the BLS12-381 curve. That round's threshold signature doesn't exist yet and can't be forged, so the ciphertext stays sealed until the network publishes it. The server never holds a key that could open a capsule early — there's no secret to leak and no admin override to abuse.
Every beacon is verified with a BLS pairing check at the boundary where it enters the system, so signatures bound to a different round are rejected — the case a well-formedness check can't catch. Hybrid encryption lifts the 32-byte plaintext ceiling that naive IBE imposes.
Go · Gin · drand · tlock · BLS12-381 · Docker
A serverless AWS pipeline that reads arXiv every week and emails you a personalised digest — summarised by Bedrock, narrated by Polly.
An event-driven Lambda pipeline does the data work, a containerised React + Express app serves the UI, and the entire stack is defined in Terraform: VPC, private subnets, NAT, ALB, auto-scaling group, CloudFront.
The design decisions are the point. Compute sits in private subnets with no public IPs and no SSH — administrative access goes through SSM Session Manager. AWS service traffic uses VPC endpoints rather than routing out to the internet and back. Scraping is idempotent via conditional puts, so a retry is a no-op instead of a duplicate. Scraping and inference are decoupled by SQS, because arXiv answers in seconds and Bedrock takes minutes.
Terraform · AWS Lambda · Bedrock · DynamoDB · SQS · SES · React · Node.js
A protein evidence workbench that runs entirely in your browser. One HTML file, no backend, no build step.
Answering a basic question about a protein normally means opening UniProt, STRING, and QuickGO in separate tabs and mentally joining the results. ProVisual fans out those queries in parallel, computes sequence-based predictions locally, and renders everything on one shared coordinate system — so you can see which annotated regions actually overlap.
The part no existing database shows visually: each natural variant is classified by what it lands on. A substitution on a catalytic residue and one in a disordered loop are not the same event, and the report says so.
Vanilla JS · Inline SVG · UniProt REST · STRING · Gene Ontology · Groq
Languages — Go, JavaScript, Python, Bash
Cloud & infrastructure — AWS (Lambda, DynamoDB, SQS, SES, Bedrock, S3, EC2, VPC), Terraform, Docker, GitHub Actions
Web — React, Node.js, Express, Nginx
Interests — Cloud computing, Linux, Computer Networks, Devops, applied cryptography, event-driven architecture
Every project above ships a documented list of what it doesn't do well. I think that's the more useful half of a README.