Minute
The same person who scrolls for an hour will not read one article. Minute cuts five stories down to what actually matters, shows the read time upfront, and ends. The hard part was not the AI. It was building something a reader can finish.
Nobody is short on attention. They are short on patience.
The standard diagnosis is that people have stopped paying attention. It does not survive contact with the evidence. The same person who cannot get through a nine-hundred-word article will spend an hour scrolling, and enjoy it. Attention is not the scarce resource. Patience for length is.
That reframes what a news product is competing on. It is not competing for time, it is competing against the cost of starting. An article asks for an unknown commitment with no visible end, which is exactly the shape of thing a tired person declines. A feed asks for nothing, which is why it wins, and why it also leaves nobody better informed.
Minute takes the opposite position on both counts. Every story is cut to what changed and why it matters, so the commitment is small. The read time is on screen before anyone starts, so the commitment is known. And there are five of them, so the commitment ends. Open it, read five stories, close it. The app tells you when you are done.
The second thing that follows from the reframe is less obvious. If length is the barrier, then a short list is not a compromise on a long one, it is a different product. Five items is a task. Tasks get finished, and finishing is the part that brings someone back tomorrow. An endless feed of better stories would lose to this, because it never lets anyone cross anything off.
Five stories, then you're gone.
The brief is fixed. Every day at 7am UTC, a cron job pulls the top stories from a news API, passes them through a GPT-4o structured-output call, and writes the result to Vercel Blob. What lands is exactly five stories, not a ranked feed that grows through the day, not a configurable number. Five. The constraint is the point.
Each story gets four fields: what happened, why it matters, who is affected, and should I do anything. That last field did more for the quality of the writing than any amount of prompt tuning. Asking a model to shorten a story produces a shorter story. Asking it what the reader should do about it produces a different piece of writing, because the question forces the summariser to reason about the reader's situation rather than the story's dramatic peak. Most news delivers anxiety without agency. Answering that question for every story, even when the honest answer is "nothing, not really", is what closes that gap.
The read time is shown upfront. It is almost always under three minutes. That is not a marketing promise. It is a deliberate ceiling: five stories, one minute each, and then the app tells you that you are caught up and to close the tab.
The reader is a pager, not a scroll.
Each story is a full screen. You swipe up or tap Next to advance. There is no scroll between stories. That is not a technical constraint, it is a decision. Infinite vertical scroll is the mechanism news apps use to dissolve the boundary between stories. Making each story its own screen restores that boundary. You always know exactly where you are: story two of five, nothing before it and three after it.
Knowing where you are is what makes the brief feel finishable. A scroll hides the end, so the reader has no way to judge whether starting is worth it. A pager shows the end from the first screen. The progress indicator is five dots at the bottom and completed ones fill in, which turns reading into something with a visible remainder rather than an open-ended activity.
On the last story the Next button becomes Done, styled differently, green and solid, to signal that the reading loop is about to close rather than continue. That button is the whole product in one interaction. Every other news app spends its final screen trying to start a sixth story. Keyboard arrow keys and swipe gestures both work, and readers who prefer reduced motion get a crossfade instead of the vertical slide.
The design is a statement about what kind of app this is.
Most news apps use red and alert-orange because those colours raise your cortisol and keep you reading. Minute uses forest green as its primary accent. That is not an aesthetic preference. It is a deliberate signal: this app is calm, it is oriented toward finishing, it is on your side.
The background is warm cream. The typeface is the system serif for display, system sans-serif for body, with no web font loading, near-instant paint. The category pills use muted, contextual colours: World in blue, Sports in amber, Health in red, Technology in indigo. They encode meaning without competing with the text.
One pipeline. One cron tick. One brief.
The pipeline runs in a single Next.js API route on Vercel's cron scheduler. It pulls from the Currents API, deduplicates and re-ranks by a weighted scoring function (recency, source credibility, category spread), then sends the top candidates to OpenAI with a Zod schema enforcing the output shape. No freeform JSON parsing. If the model returns something that does not match the schema, the call throws and the cron logs the error.
The finished brief is written to Vercel Blob as a private file. Reading it back from the client requires a signed URL, which the server generates on each page load. No public CDN link, no stale cache serving yesterday's brief as today's. The brief either exists for today or the home page tells you it is being generated.
| Next.js 15 | App Router, Turbopack, Vercel cron |
| GPT-4o + Zod | Structured-output summarisation, schema-enforced |
| Vercel Blob | Private brief storage, served via signed URL |
| Currents API | News source, ranked by weighted scoring function |
| Framer Motion | Swipe animations, respects prefers-reduced-motion |
| Tailwind v4 | Full custom design-token layer, dark mode redesign |
The hard part was not the engineering.
Structured LLM output with Zod validation, a cron-driven pipeline, a swipe-paged reader. None of those took long to build. The hard part was the product conviction: committing to five stories and a hard stop, and then not adding the features that would erode both.
Every instinct said to make it configurable. Let the reader choose how many stories. Let them follow topics. Let them save stories for later. Each of those is a reasonable idea in isolation, and each is a small step toward a product that is no longer different from every other news product. Every one of them also does the same specific damage: it removes the ending. A configurable count means the list is no longer a task. Saved stories mean there is always something waiting. Following topics means the brief grows on the days the reader is busiest.
That is the trade this product makes. It gives up the growth mechanics that come free with a feed, and in exchange it can promise something no feed can: that opening it costs three minutes and then stops. A product that ends is harder to grow and easier to trust, and for something a person is meant to open every morning for years, trust is the compounding asset.
The AI is the least interesting part. The model is good at summarising and it got noticeably better when the question changed from shortening to consequence. What no model can decide is that finishing is the feature. That restraint is a product decision rather than a constraint to route around, and it has to be made before the first line of code.