Full-Stack

Gear Locker —
Inventory Tracker

A full-stack web app for cataloging and tracking personal outdoor gear — skiing, biking, and backpacking equipment — with condition tracking, cost and weight stats, and per-item custom fields. Built as a personal project to replace a spreadsheet for managing a 60+ item gear collection.

Timeline Personal Project
Team Solo
Type Full-Stack Web App
C# ASP.NET Core Razor Pages Entity Framework Core SQLite JavaScript
▶ Watch Demo

Demo Video

Full walkthrough of the Gear Locker features

Overview

60+
Gear Items Tracked
13
Gear Categories
8
Sortable Columns

Screenshots & Previews

Gear Locker home page showing the full gear grid with category filters and sort controls
Home page — full gear grid with category filters, sorting, and per-item cards
Gear Locker filtered to the Hydration category
Category filtering — narrowed to Hydration items, sorted by category
Add New Gear form showing the Identity and Sports sections
Add New Gear form — Identity and Sports sections of the intake form
Custom fields section showing key-value pairs for a ski boot's specs
Custom fields — arbitrary key/value specs added per item without touching the schema

Technical Highlights

Full CRUD Data Model

Designed a single GearItem entity covering identity (name, brand, model, category), financials (MSRP, price paid, purchase location), physical specs (weight, R-value, size, material), condition, and dates acquired/retired — backed by EF Core and SQLite with auto-migration on startup.

Sport & Category Filtering

Items are tagged with one or more sports (ski, bike, backpack) and a freeform category, both filterable and combinable via query-string driven routes, alongside a text search across name, brand, and notes.

Multi-Column Sorting & Live Stats

Sortable by name, brand, MSRP, price paid, weight, date acquired, condition, or category in either direction. A live stats bar aggregates total MSRP, amount paid, and total pack weight across the currently filtered set.

Dual-Unit Weight Entry

Weight can be entered in lbs/oz or grams via a toggle, with client-side JavaScript switching the input mode and server-side conversion normalizing everything to grams for storage and display.

Custom Fields per Item

Arbitrary key-value pairs (e.g. "Temperature Rating", "Tire Width") are captured through a dynamic form and serialized to JSON on the model, letting sport-specific specs be added without changing the schema.