About Allen
Currently studying at grit:lab to become a full stack developer.
What draws me to programming is the challenge and creativity of problem-solving — breaking down complex issues into smaller, meaningful building blocks that work together to solve real problems.
I enjoy exploring new ideas and technologies and am constantly developing my skills across the full stack. Whether it’s building intuitive user interfaces or designing the logic behind the scenes, I strive to write clean, purposeful code that fits into the bigger picture.
I'm excited to keep learning, building, and collaborating on projects that help me grow and make a meaningful impact.
Skills & Technologies
LinkedIn: https://www.linkedin.com/in/allen-leeyn/ Email: leeyn.shun@gmail.com GitHub: https://github.com/AllenLeeyn
Projects
Guidely — Guiding You Through Documents You Never Want to Read React FastAPI FAISS GenAI API SQLite
Guidely is a Retrieval-Augmented Generation (RAG) System designed to help teams quickly pull relevant knowledge from internal documents without wading through endless pages. This RAG system uses the FAISS vector database for fast lookup of relevant information chunks and passes them to Google GenAI as context to generate quality responses backed by references.
Account Types
- Admin: Upload and manage knowledge base (Adding, editing, and indexing)
- User: Ask questions and receive accurate, reference-based answers
Development Journey
This is my first time working with vector databases and LLM APIs. It was very fun and interesting. The integration with FAISS and Google GenAI with Python was surprisingly smooth. I think I spend more time on setting up the Relational datavase to handle different user types and conversation histroy,
On the topic of chat history, I tried limiting token usage by including only questions and answers (no source context) of past exchanges. The inclusion of chat history does help improve some answer quality, but in some cases it reinforces a poor answer. Maybe it is the way I am handling history… what are your thoughts?
For simiplicity, we load all FAISS indexes into memory on startup (No good as we hog the memory). This is acceptable for small dataset (what we are targetting). A better way of handling this is to use Approximate Nearest Neighbors (ANN) indexing.
I also added caching to return answers for frequently asked questions, which is great for speed but not ideal when answers get stale or are of poor quality. It’s a trade-off, but it helps with keeping token used low.
Lastly, I tried optimizing the instructions to the LLM for the targeted 3 seconds per response. In the end, switching from gemini-2.5-flash to gemini-2.5-flash-lite greatly reduce the latency from 2-8 seconds to 1-3 seconds but sacrifices quality and accuracy (generally shorter response and not all relevant chunks is used).
DOMBERS — Browser-Based Multiplayer Bomberman Clone HTML CSS JavaScript Go WebSockets
No installation. No registration. Just join and play with friends in a fast-paced, browser-based multiplayer Bomberman experience.
Unique Gameplay
- After 2 minutes, spikes activate to increase tension on the board.
- If you lose all your lives, you become a ghost and can haunt other players.
- Designed for both desktop and mobile with smooth touch controls.
Challenges
Developing a real-time multiplayer game required careful handling of synchronization, concurrency, and maintaining consistent 60 FPS performance. While performance was critical, we also focused on visuals, UI design, and cross-browser consistency.
Try it out: https://bomberman-dom-4lnj.onrender.com/
𝗪𝗮𝗹𝗸𝗶𝗻𝗴 𝗧𝗼𝘄𝗮𝗿𝗱 𝘁𝗵𝗲 𝗟𝗶𝗴𝗵𝘁 — 𝗔 𝗥𝗮𝘆 𝗧𝗿𝗮𝗰𝗶𝗻𝗴 𝗣𝗿𝗼𝗷𝗲𝗰𝘁 Rust
This project generates images by simulating how light rays interact with 3D objects before reaching the camera. Using mathematical models, the program traces light as it bounces off or passes through objects, accumulating color along the way. This technique is called ray tracing, and it aims to mimic how light behaves in the real world.
It supports basic shapes such as spheres, cubes, planes, and cylinders, with materials that control how light behaves:
- Diffuse — scatters light in many directions
- Reflectivity — reflects light like a mirror
- Transparency — allows light to pass through
- Index of Refraction — bends light depending on material
- Emissive — emits light from the object itself
smart_road Rust SDL2
This Rust project simulates a smart intersection system designed to manage the flow of autonomous vehicles (AVs). The simulation uses a Crossing Manager that assigns time slots to approaching vehicles, coordinating their movements to safely and efficiently cross the intersection without collisions.
Instead of relying on traditional traffic signals, the Crossing Manager divides the intersection’s conflict area into collision zones. Vehicles are given specific entry times into these zones, ensuring that no two vehicles occupy the same zone at the same time. This models how future AV-dominated road systems could operate using precise timing and spatial awareness.
Ålands Idrott x Consilia Data Analysis Challenge Go SQL React JavaScript
During the first grit:lab hackathon, the Ålands Idrott x Consilia Data Analysis Challenge, our team — Ekaterina Abrakhova, Othmane Afilali and Allen Leeyn — spent four sleepless days designing a solution. While I tackled the data reconciliation layer, Othmane crafted the UI and charts, and Ekaterina tested for functionality and seamless user experience.
We built a lightweight local web app that:
- Reconciles club data from two sources (with different schemas and IDs)
- Processes the data into funding statistics for budgeting and auditability
- Allows users to enter or change values for budget calculation
- Visualizes distributions through clear dashboards
Clonernews — a simple UI frontend for the Hacker News API HTML CSS JavaScript
A lightweight, modern front-end for browsing Hacker News content. Built over 2 days to fetch live data from the Hacker News API and display it in a clean, user-friendly interface.
Key Features:
- Infinite scroll: posts automatically load as you scroll
- Expandable posts: click to view full content and nested comments
- Live updates: see new posts as they appear without refreshing
Lessons Learned: Understanding the structure and purpose of different API endpoints was tricky. Managing live updates efficiently required filtering out unnecessary data while ensuring relevant posts were updated in real time.
Check it out: https://allenleeyn.github.io/clonernews/