// 01 - intro
Student
Nikolay Li
High school student building software in a club context.
View my work// 02 - timeline
Key Club App
Project Highlight
- Python script - Fall 2024
Wrote a Python script to automate logging volunteer hours and events.
The club vice president, at the time, spent hours each week manually logging hours and events for hundreds of members. My script used the user's Google account to read and parse attendance documents and write that information to the club spreadsheet.G o o g l e APIs
-
Made a Discord bot to act as a frontend for the Python script.
The club had a Discord server, so I wrote a Discord bot and turned the Python script's functionality into slash commands. The Discord bot used the roles in the Discord server for authorization, so regular members couldn't use the logging functionality. I had to use a Google Service Account to make this possible (so users wouldn't need to log in with their own).DiscordGo
-
Created a Go API and connected the club website and Discord bot to it.
Since I was elected as the webmaster, I wanted the club website to have the same functionality as the Discord bot. I used SQLite as the database (for storing club member hours and other information for quick lookup) and net/http to make the API. Since the logging functionality was now available on the website, I needed to add authentication and authorization. I decided to roll out my own session-based magic link system via Maizzle email templates and Google's SMTP using the club Gmail account. I turned the Discord bot's functionality into a Go API so the website could use it and rewrote the bot to rely on the API to prevent inconsistencies with the data between the website and the bot.SQLite
-
Consolidated software into one SvelteKit app.
The Discord server was inactive and nearly all communication happened through Instagram, so the officers decided to remove the Discord server. I also realized the next webmaster would need to be proficient in Go and Javascript, so I decided to simplify the stack by rewriting the API in TypeScript using SvelteKit. Supabase killed two birds with one stone: replacing my custom auth system with a simpler, more secure one, and replacing SQLite with a more robust solution that had a built-in webui table editor. Furthermore, this meant I could move everything off my home lab and onto the cloud, where Supabase is hosted on Supabase and the SvelteKit app is hosted on Vercel. That way, the next webmaster would not need to have their own home lab to keep the club website running.
// 03 - project
Home lab
Mini project
My home lab is an Intel NUC running Proxmox.
I have an LXC running Seafile server on it. My Seafile files are stored inside an LVM that's mounted
inside the LXC. Tailscale is also running inside the LXC and the PVE Node, so my devices have
exclusive access to my home lab and Seafile from anywhere.

// 04 - contact
Get in touch
with me
- Email nikolayliwork@gmail.com
- Phone +1 (425) 215-5257
- GitHub github.com/thenikolayli
- Resume Download PDF
a Nikolay Li production
Portfolio © 2026