← Selected work
Solo project · Product design & development

Dusk

An AI tool for generating work reports.

Dusk Capture interface in a front-facing screen mockup, with work notes ready to organise.
Role
Product design · Frontend development · LLM integration
Timeline
Functional prototype: 2–3 days · UI design: ~2 weeks
Status
Functional prototype · UI implementation in progress
Platform
Web app · View code ↗
Tech stack
Next.js · TypeScript · Groq API
AI focus
Structured output prompting · Llama 3.3 70B
Result from my own use

Daily report preparation dropped from ~30 to ~7 minutes.

Estimated from my own use of Dusk.

01 · Overview

The problem

At work, I had a morning stand-up every day, a daily report due before I finished, a weekly report every Friday, and a monthly report. They often covered the same work.

My work log for preparing reports

I started keeping a work log so I could record my work once and reuse the notes with AI for different reports, instead of starting from scratch each time. When I needed a report, I copied the relevant entries from Notion into an AI tool to generate it.

Notion work log showing twelve selected records with project, work type, week, quarter and status.
Selected entries from my Notion work log, anonymised to protect company IP.

Work-log structure

I found that good work reports focused on results and numbers. As I used my Notion log, I kept revising its structure to help me measure my output. Project and work type let me group entries and quickly count what I had completed, for example, the number of specs written or feedback rounds completed for each project. Dates let me filter those entries to a specific reporting period.

Work type

Grouping entries by work type let me quickly calculate the numbers I needed for each report, such as the number of specs written during the selected period.

Project

Grouping by project kept reports relevant to each project lead. Even with the same lead, it helped me show my contribution to each project.

Week

I also recorded the week alongside the date, since work is often summarised on a weekly basis. This made it easier to group entries for each reporting period.

Why I built Dusk

I was tired of reporting on the same work again and again for different reports, and switching between apps each time to gather the information I needed. Since I was already using AI to generate reports, why not create a product with AI built in so I could complete every step in one tool?

I also used my work log when developing Dusk. Its 242 entries captured eight months of actual tasks and the categories I had assigned to them. Those existing pairings made it a useful dataset for teaching Dusk how to match new notes to projects and work types.

02 · User journey
Reporting workflow and proposed AI workflow compared. A typical daily report takes approximately 30 minutes. Proposed workflow: describe work in everyday language, AI organises notes and generates a report, then review and copy it into the reporting form.
03 · Research

How participants record and report their work

I sent an online questionnaire to 12 people in different roles. I asked how they reported their work, where they kept their records, and whether they used AI to write reports.

Participants’ roles
Software engineeringFinanceAuditProduct designTechnical operations & QALab workFilming
12of 12

Report their work

Nine had a regular reporting schedule.
The other three reported only when asked.

6of 12

Keep a work log consistently

Three struggled to keep their logs up to date.
One had stopped logging.
Two had never kept a work log.

10of 12

Use AI to write reports

Seven used AI for most of their reports.
Three used it sometimes.

August 2026 · 12 respondents · Recruited through my own network · Run after v0.2 was built View survey responses

“A lot of the information has already been written in tickets or messages, so reporting can sometimes mean summarising the same information again.”

— BruceTechnical Operations & QA Specialist

What this meant for Dusk

Bruce’s answer echoed my own experience: recording work did not remove the effort of preparing a report. This reinforced my decision to let users reuse the entries they had already logged in Dusk to generate different reports.

04 · Product walkthrough

01How to log your work

I wanted logging work to feel lightweight, without asking users to fill in each field separately. Users describe their work in plain language, and AI organises the notes into entries matched to their saved projects and work types.

Dusk Capture screen with work input, project settings and today's work entries.

Select a numbered step to explore

1

Automatic categorisation

Auto-detect matches work notes to saved projects and work types, reducing the need to categorise each entry manually.

02Reviewing and confirming entries

Today’s log with confirmed entries, entries awaiting confirmation, and report selection.

Scroll to explore the entry states ↓

1Review

Click Review to check the AI-generated entry.

Entry awaiting confirmation.

2Edit / Confirm

Check the project, work type and description. Make any changes you need before confirming.

Edit the work type using the dropdown.Edit the entry description inline.

3Confirmed

The green dot shows that the entry is confirmed and can be selected for your report.

Confirmed entry, ready to select.

4Select & Generate

Select the entries you need, then generate your report.

Selected entry and Generate report action.

5Edit a confirmed entry

Hover over a confirmed entry to reveal the edit and delete options.

Confirmed entry with edit and delete controls visible on hover.

04Mascot states and feedback

I added a mascot to make logging work feel a little more interactive. Its expressions and movements also give users quick feedback on what is happening, from typing a note to waiting for AI or reviewing new entries.

05 · Design decisions

01Set up projects and work types once

What I tried first

I first let users write freely and left the AI to work out the project, work type and status. When a note didn’t mention the work type, AI sometimes guessed wrong. Longer notes were harder to categorise correctly.

What I changed

I added a one-time setup where users list their projects and work types. The AI matches new notes against these lists.

The same work note classified without a work type list and with a predefined list: AI names the type Dialogue data in the first example and selects Data config in the second. Illustrative example.

02Separate report purpose from date range

What I tried first

My first version had daily, weekly and monthly reports. Looking back at eight months of my work logs, I saw they used the same entries. The difference was who would read them and how much detail they needed.

What I changed

Users choose the report type and time range separately, so they can use the same work entries for different reports.

Before: daily, weekly and monthly report views. After: report type and time range are selected separately.

03Review AI-generated entries before saving

What I tried first

I first saved AI-generated entries straight to the work log. When I used it myself, the AI sometimes picked the wrong project or work type, and those mistakes carried into later reports.

What I changed

I added a review step before saving. Users can change the project, work type or status, then confirm the entry.

Automatic saving compared with review before saving: the user changes the work type from Meeting to Research, then confirms the entry. Illustrative example.
06 · Testing & next steps

What I learned from the screen feedback

I asked the 12 survey participants for feedback on an earlier version of Dusk to check how they understood the design and whether my design decisions made sense to them. They viewed static screens without any explanation of how the product worked.

August 2026 · 12 participants View questionnaire and responses

01

Half chose the summary for looking back six months later

I hid the report names to test whether the content alone helped people choose a suitable format for each situation. Tracker showed the full work log, Standup covered yesterday’s work and today’s plan, and Manager summarised recent work.

Report choices by situation · 12 participants

Report choices from 12 participants. Highest counts are highlighted for each situation.
SituationTrackerStandupManager
Daily team stand-up2100
Weekly manager 1:1336
Reference six months later426

What I changed

Participants’ choices showed how their reporting needs differed. I moved the full work log into Records and revised the other two formats: Daily standup for short, focused team updates, and Progress update for summarising work over any chosen period. This made reports useful in more situations.

02

Only 2 of 12 fully understood the first-time setup screen

On first use, Dusk asks for two lists: the projects you work on and the types of work you do. It uses these lists to categorise the work notes you enter later. I showed participants this screen without any explanation.

What did they think this screen was for?

Fully understood the intended purpose
2
Partly understood the intended purpose
4
Thought it was for logging or planning work
6

Did they list projects and work types separately?

Listed projects and work types separately
3
Repeated, mixed up or skipped a list
9

What I’ll do next

I’ll design an onboarding flow that explains why Dusk needs separate project and work type lists, with an example of each before users begin setup. I’ll then test whether users understand the difference and can complete both lists.

03

Everyone would keep the confirmation step, but half expected large batches to feel tedious

Users check AI-generated entries before saving them. I asked participants whether they would keep this step.

Would they keep the confirmation step?

Keep it, it’s necessary
6
Keep it, but large batches feel tedious
6
Remove it
0

What I’ll do next

I’ll design a way to confirm several entries at once while keeping individual entries easy to check and edit. I’ll then test whether it saves time without making errors harder to catch.

07 · How I built it

Designing for reliable AI output

In early use, the model sometimes assigned work to the wrong project or work type. I designed constraints and checkpoints around these errors, then built them into a working prototype so I could test the experience myself. The five decisions below explain how I handled categorisation, review and report generation.

Work notes are organised, reviewed, corrected if needed and confirmed before saving to Records. Users can then choose report type, time range and work entries, generate a report and copy it.

01Building context from my work log

I used Claude to analyse 242 entries from eight months of my actual work, looking at how task names mapped to work types. I used this dataset to develop matching rules for the prompt. The model receives those rules as context.

// Real work examples used to develop matching rules
Task,Type,Project
"Worked on character 1019’s spec",Spec,2D Card Game
"Reviewed character 1004’s illustration",Art feedback,2D Card Game
"Tested on the test server",QA,3D RPG
"Set up character 17’s data",Data config,Open World

02Limit what the model can choose

I send the user’s projects and work types with every request as the options to match against. Entries that fit none are marked Uncategorised for the user to resolve.

{
  "text": "2D Card Game: finished the Jörmungandr character spec draft",
  "projects": ["2D Card Game", "3D RPG", "Open World"],
  "task_types": ["Spec", "Data config", "QA"],
  "date": "2026-06-19"
}

03Check each entry before it is saved

Each piece of work comes back as its own entry, and the user confirms or corrects it before saving. Users can catch a wrong project or work type on the entry itself, before it reaches a report.

{
  "name": "Jörmungandr character spec",
  "project": "2D Card Game",
  "task_type": "Spec",
  "status": "Done"
}
// saved to Records only after the user confirms

04Write reports only from confirmed work

Users choose which confirmed entries feed the report. The instructions tell the model to keep recorded quantities and avoid claims the entries don’t support, so the summary stays grounded in the work log.

// report instructions, excerpt
"daily_standup":   "Yesterday’s work and today’s plan."
"progress_update": "Summarise by project over the selected period."
"all_reports":     "Keep recorded quantities. No unsupported claims."

05Use a consistent structure for review

I defined one set of fields so every entry can be reviewed and corrected in the same interface. Lower-temperature parsing reduces variation and code-fence cleanup fixes a formatting issue, but users still check the content.

// lower variation for parsing
parse: 0.3   report: 0.7
// remove Markdown fences, then parse
const cleaned = responseText.replace(/```json|```/g, '').trim()
const entries = JSON.parse(cleaned)
08 · Design system

Interface colours and typography

I developed the colours, typography and component styles while designing Capture, then applied this system across the remaining screens to keep the design consistent.

Text

Heading, body and secondary text colours.

Headings#242334
Icons#444658
Body text#5F6473
Metadata#7D7F89

Accent and status

Selection, confirmation and entries that need attention.

Selected#7B60E3
Accent marks#9983E3
Chips#E5DDF5
Confirmed#1F9A4C
To confirm#F2B630

Surfaces

Backgrounds and borders used in the current screens.

Cards#FFFFFF
Tag fill#F0ECF9
Borders#DED2F3
Page canvas#FBF9FF
App background#EAE4F9 → #FBE6DB

Type scale

Text examples from the product interface.

What did you work on today?32 / 700Capture heading
Progress update24 / 700Screen title
Today’s log20 / 600Section
What did you work on today?16 / 400Input field
Athena dialogue data14 / 600Record title
Added the first 138 lines to the config table.13 / 400Description
Data config · Confirmed · 10:1212 / 400Tags, time, counts
WORKLOG · WORKSPACE11 / 400Sidebar labels
Back to selected work ↗