This repository contains the source code for my personal website. The site serves as a platform to share my thoughts, projects, and other content I find interesting.
- Blog: Posts about various topics, including school, life, and random ideas.
- Projects: A showcase of personal projects and experiments.
- Comments: Visitors can leave comments on blog posts, with support for author names and timestamps.
- Dark Mode: Toggle between light and dark themes.
- Math Support: Render mathematical expressions using MathJax.
- Markdown Parsing: Blog posts are written in Markdown and rendered dynamically.
- Notes: Course notes rendered from Markdown (with front-matter), featuring MathJax support and an auto-generated table of contents.
- Pagination & Filtering: Browse blog posts by tag or search with pagination.
-
Frontend: HTML, CSS, JavaScript (Vanilla)
-
Client-side Libraries:
-
Server-side Libraries (As Vercel Serverless Functions):
- node-fetch — HTTP client
- sanitize-html — clean user input
- @upstash/redis — KV caching
- pg — Neon Serverless Postgres driver
-
Backend: Node.js (serverless via Vercel)
- Comments: cached in Upstash Redis + kept in Neon Postgres
This site is deployed on Vercel with automatic GitHub-triggered builds.
The comments endpoint sanitizes input, limits request and field sizes, rate-limits posts per IP and post slug through Upstash Redis, rejects duplicate comments for a short cooldown window, and uses a hidden honeypot field. Turnstile is optional and is requested only for suspicious submissions or bursts of activity.
To enable the optional challenge in production:
- Set
TURNSTILE_SECRET_KEYandTURNSTILE_SITE_KEYas Vercel environment variables. - Put the public site key in the
data-site-keyattribute of#comment-turnstileinpost.html.
The GitHub language proxy is restricted to repositories featured on the Projects page and caches successful responses.
Use of this content for training machine learning or AI models is expressly prohibited without prior written consent. See TERMS.md for full details.
Feel free to reach out via:
- Email: robinchen@nyu.edu
- Github: localhost433