Inspiration

Most productivity tools ask, "What do you need to do?" I wanted to ask a different question: "What keeps making your life unnecessarily harder?"

A manually copied report, a missing project link, or another meeting without an agenda may seem too small to fix. Repeated over time, those annoyances become a recurring cost. I designed Friction Hunter to turn a short complaint into evidence for a practical improvement, without making the user categorize another task.

What it does

Friction Hunter helps an individual capture, recognize, prioritize, and resolve recurring friction. In its Alexa+ web simulator, the user types a natural-language observation such as, "Alexa, log a friction. I spent twelve minutes copying the sales report manually again."

Amazon Nova Lite, accessed through Amazon Bedrock, extracts a structured observation and decides whether it belongs to an existing pattern. The dashboard retains the history, shows recurring patterns, and ranks them by estimated time cost weighted by severity. Instead of presenting twenty priorities, it recommends one unresolved friction and a category-based next action.

The user can mark a pattern resolved and view estimated weekly and yearly savings. If the same friction is logged again, that pattern becomes active again. These numbers are projections from logged observations, not measured time recovered. Representative seed data illustrates the workflow.

The demo is a text-based Alexa+ simulation, not a connected Echo device or certified Alexa skill. Six backend MCP tools expose capture, history, patterns, recommendation, resolution, and progress for external clients.

How we built it

I built the project as a solo developer, with Codex assistance for implementation and verification. The interface uses React, TypeScript, Next.js conventions through vinext, and Tailwind CSS. A Cloudflare Worker serves the interface and API, while Cloudflare D1 and Drizzle ORM persist observations and patterns.

The web capture API and MCP logging tool share one analysis-and-storage path. Server-side requests to Bedrock's Converse endpoint use Nova Lite in Sydney, signed with AWS SigV4 through aws4fetch. A dedicated IAM identity can invoke only that model in that Region; credentials never reach the browser.

Zod validates the model's structured output and rejects unknown cluster IDs. If inference is unavailable or invalid, deterministic rules keep capture usable, and the response explicitly identifies that fallback. Impact scoring, recommendation ordering, and category-based fix suggestions remain deterministic rather than being presented as additional model-generated reasoning.

I also added private access-key login, signed browser sessions, same-origin checks for cookie-authenticated writes, and rate limits. The deployed interface and backend are independent of the original ChatGPT Sites account.

Challenges we ran into

The hardest integration issue was the gap between a successful local model call and a working production request. Bedrock invocation failed in us-east-1 but worked in ap-southeast-2. After deployment, the AWS SDK bundle mixed Node and browser runtime exports and failed inside the Worker. I replaced that transport with signed native HTTPS requests and verified a real production capture returning Bedrock provenance and the correct reporting pattern.

Persistence and rendering also exposed practical edge cases: generated Worker configuration did not find local migrations, a large seed insert exceeded D1's bind-variable limit, and timezone differences caused hydration mismatches. The documented workarounds were explicit migration execution, smaller insert batches, and deterministic timestamp formatting.

The original hosted Site became inaccessible for editing through the current account. Moving to independently managed Cloudflare hosting made the deployment reproducible, although historical records from that Site have not been imported.

Accomplishments that we're proud of

I am proud that the project connects a small observation to a concrete improvement loop rather than stopping at a chatbot response. Classification, persistent history, recurring-pattern selection, prioritization, resolution, and estimated progress work together in one product.

The Cloudflare deployment has been checked for private login, dashboard and D1 access, and discovery of all six MCP tools. A live capture was processed by Nova Lite and matched the existing manual-reporting pattern. Eighteen automated tests cover core scoring and extraction, structured-output validation, signed inference requests, fallback behavior, and access controls.

What we learned

This build reinforced the importance of separating language understanding from product rules. The model handles the meaning of an observation; validated data and deterministic logic handle persistence, scoring, and state changes. Making fallback behavior visible is essential when the product promises AI processing.

It also showed why production verification matters: local inference success did not guarantee that the same integration would run in a Worker. Finally, estimated savings are useful only when the interface and explanation make their assumptions clear.

What's next for Friction Hunter

I would next connect the workflow to a real Alexa+ environment when the required access is available, while retaining the simulator as a reproducible test surface. I would also validate the backend with independent MCP clients rather than claiming complete interoperability from tool discovery alone.

Product improvements include explicit time-windowed reviews, clearer separation of demo and personal data, per-user identity and storage isolation, and recurrence checks after a fix. Longer term, I want to compare estimated savings with user-confirmed outcomes, improve multilingual capture, and help users choose the smallest useful intervention without automatically executing changes on their behalf.

Built With

Share this project:

Updates

Submission history