Back to projects

AI / MLPrototype2025

Sprint Ticket Master

Upload a spreadsheet of tasks and Google Gemini turns each one into an estimated, categorised sprint ticket on a Jira-style board.

8
Fields generated per ticket
1
Server route between the browser and Gemini
0.2
Sampling temperature, for steady estimates

Timeline

2025

Role

UI, parsing, prompt design and API route

Team

Solo

Domain

Project management · Agile delivery

Status

Prototype

Stack

Next.js 15React 19TypeScriptGemini 2.0 FlashSheetJSTailwind CSSshadcn/ui

Source

Section 01

Overview

Before sprint planning, someone has to turn a rough task list into structured tickets: a clear title, a description, an estimate, an owner and a category. That list usually lives in a spreadsheet.

Sprint Ticket Master automates the step. Upload an Excel file with a Task Description column, review what was extracted, and Gemini writes a full ticket for each task, shown as cards or a table and editable on a Jira-style detail page.

Upload a task list
Upload card for an Excel file with a template download button
Tasks extracted in the browser
Six extracted tasks listed after uploading a spreadsheet, with a Start Analysis button

Section 02

How It Works

SheetJS parses the workbook in the browser, so nothing leaves the machine until you choose to analyse. Files without a Task Description column are rejected with a clear message before any request is made.

The tasks go to a single Next.js API route, which keeps the Gemini key on the server, calls gemini-2.0-flash, extracts the JSON array from the reply and assigns ticket IDs. Without a key configured, the route returns built-in demo tickets and the interface says so in a banner.

Validation before any request
Upload card showing an error that the file must contain a Task Description column

Section 03

Prompt Design

The prompt teaches the output by example: one complete ticket in JSON with all eight fields (title, three-point description, story points, assignee team, reporting lead, parent ticket, category, status), followed by the numbered task list.

It also grounds the model in a fixed company context, with four teams, four leads, four categories and a parent-ticket ID format, so assignments land on real options instead of invented ones. Temperature 0.2 keeps estimates consistent between runs.

Section 04

Interface

Tickets open in a card view for a quick read or a table for scanning the whole sprint. Each one links to a detail page where the title, story points and status can be edited and saved for the session. The screenshots below show the app's built-in demo tickets.

Card view (demo tickets)
Generated tickets in a card grid with status, category, points and assignee
Table view (demo tickets)
Generated tickets in a table with ID, title, story points, assignee, category and status
Ticket detail (demo ticket)
Ticket detail page with description, comments and an editable sidebar for status, points and assignee
Ticket cards stacked on a phone screen
Cards on a phone

Section 05

What I'd Build Next

The prototype proves the flow end to end. The next version would harden it:

  • Gemini's structured output with a response schema, instead of extracting JSON from free text
  • Validation of every field before it reaches the interface
  • Persistence, so a generated sprint survives a refresh
  • Authentication and rate limits on the API route