Inside the work.
Three projects, unpacked from problem to implementation. Each walkthrough follows the documented project details and makes the flow visible: the steps, decisions, and components that turn an idea into a working system.
Ask a question.
Get a query.
A natural language interface for relational data. The system transforms a question into SQL through discrete, inspectable stages, using approximate matching to handle wording variation.
What happens at each stage
The problem
Users who understand their data may not know the schema or SQL syntax needed to query it directly.
Design choices
- Approximate matching over exact keyword-only rules.
- Separate pipeline stages for easier maintenance.
- Detect numeric versus string values before composing conditions.
Query capabilities
SELECT and WHERE construction, multiple conditions, six comparison operators, and natural-language sorting cues.
Similarity you
can inspect.
A PDF analysis workflow that compares documents, groups related matches, and highlights shared phrases directly in annotated copies for human review.
Document analysis flow
Comparison and review loop
Multiple signals
Combining three n-gram levels helps account for phrase overlap at different scales. Multiple distance methods let users evaluate similarity in different ways.
From pairs to groups
Transitive clustering represents indirect connections too: if one document links to a second, and the second to a third, they appear in the same group.
Reviewable output
Scores identify candidates; highlighted matching phrases help a person inspect why the documents were connected.
Rules first.
Then the interface.
A desktop implementation of Baagchal, the traditional Nepali strategy game. The core rules and game state are modeled independently from the SFML presentation layer.
Game state and move validation
Separation of responsibilities
Game engine
Tracks player turns, board state, valid movement, captures, and win-condition detection for both tigers and goats.
Interaction
SFML provides the graphical board, user input, piece movement, and real-time state updates in a desktop game loop.
Maintainability
Object-oriented design keeps game entities, board state, movement logic, and user interaction in distinct components.