From the Apps shelf · No. 0006
La Sporta
Our buying group of 38 families in Padova needs one place for the monthly orders instead of a spreadsheet and WhatsApp.
Worked example (simulated interview)
The brief
This is a worked example. Askmill wrote this prompt from a simulated client interview, in which a model answered the questions for an invented client. The line under the title is the opening request the interview started from; everything else came out of the answers.
The prompt
The complete text, exactly as it is handed to an AI builder.
A shared order book for a solidarity buying group in Padova: 38 families, nine producers and one parish hall on Thursday evening, opened on a phone from a personal link pasted into WhatsApp. Concept: every order is typed once, by the family that wants it, and the adding-up is never done by hand again. Real mechanics: each producer runs rounds with its own closing time and minimum; a round is aperto, chiuso, saltato or consegnato. Money is held in integer cents and shown as "€ 12,00". Goods sold by weight cost grams × price per kg / 1000, rounded half-up to the cent, labelled "circa" until the real weight is typed at delivery and "importo definitivo" afterwards; fixed packs never change. A family owes one amount per calendar month (every round delivered in it), paid by bank transfer with a reason code such as GAS-MAR-17 (month, family number 01-38). Paying late never blocks a pick-up. Seed data, loaded on first start and fully editable: Orto dei Colli, weekly, closes Monday 21:00, Cassetta piccola 4 kg € 12,00 and Cassetta grande 7 kg € 19,00, minimum 15 cassette, with one editable line "Questa settimana: radicchio, porri, cavolo nero, mele."; Malga Pian del Larice, Asiago fresco € 11,50/kg in pieces of circa 500 g, minimum 12 kg; a rice mill in Isola della Scala, Riso Vialone Nano 1 kg € 3,80 and Riso Carnaroli 1 kg € 3,60, minimum 30 kg; an olive mill on the Garda, Olio extravergine latta 3 l € 42,00, minimum 24 l; a soap maker on the Brenta, Detersivo piatti alla spina 1 l € 2,40, minimum 40 l; a flour mill on the Bacchiglione, Farina tipo 1 1 kg € 1,90, minimum 50 kg; a small beekeeper, Miele di acacia 500 g € 7,50, minimum 20 vasetti; a citrus grove in Sicily, Arance Tarocco € 1,80/kg in crates of circa 10 kg, minimum 300 kg, two rounds a winter and hidden unless a round is open; Pastificio Graticola, Penne 500 g € 1,70, minimum 60 pacchi. Monthly producers close on dates the coordinator sets. Families carry Veneto surnames (number 17 is famiglia Rossi); the seed month is March, with rice at 27 of 30 kg two days before closing. A price edit touches open and future rounds; closed rounds keep their snapshot. Producers can be added. Mood: cheerful, calm, familiar; a straw shopping bag of vegetables set down on a kitchen table in morning light, the opposite of a crowded, glossy shop. Light page. Palette: straw #F6EDD6 page ground; paper #FFF9EA cards; ink #2A2118 for all text (at least 12:1 on straw); leaf green #2F6B34, reserved for the single primary action of the current screen ("Ordina", "Salva l'ordine", "Chiudi l'ordine", "Copia per il produttore") with a white #FFFFFF bold label (at least 6:1), nothing else uses it and tick-box lists carry no green; woven brown #8A6A3B for hairlines and drawings; pumpkin #C97A1E for the fill of the minimum bar only; tomato #B3261E only for the words "da pagare" and "chiude oggi" (at least 5:1 on straw). Brown tints at 15% and 30% over straw are allowed; colour is never the only signal. Images are drawn inline: a small woven bag beside the title and one line mark per producer (leaf, cheese wedge, rice ear, olive, drop, wheat ear, bee, orange, penne). No photos. Structure: four kinds of secret link (random 20-character tokens), no accounts. Family link, three screens. "Adesso" greets by hour and name ("Buonasera, famiglia Rossi"), then lists open producers by nearest closing, with days left as the largest type on each card ("mancano 2 giorni", "chiude oggi alle 21:00"), an anonymous group bar ("27 di 30 kg", then "minimo raggiunto" with a tick) and one green "Ordina" that opens the nearest producer not yet ordered; cards are tappable too. The producer screen lists products with minus and plus buttons, a running total and "Salva l'ordine", editable until closing. "Il mio mese" shows the family's lines, the amount, the code, the IBAN Franco typed once on his page, paid or "da pagare", the pick-up ("giovedì, 18:30-20:00, sala parrocchiale") and "Chi ritira?" with chips "Ritiro io", "Ritira mio marito", "Ritira un vicino" or 60 free characters. Coordinator link, three tabs: "Produttori" (bars, prices, opening and closing rounds, real weights per family), "Famiglie" (38 names; tap one to order in its place, marked "inserito dalla coordinatrice", and "Copia il link" for its personal link), "Giovedì". Treasurer link, one page "Pagamenti": family, code, amount, a tick "pagato", a smaller "in contanti", unpaid first, sums paid and outstanding, "Copia il promemoria" per family. Duty link, only "Giovedì": the evening's families with their goods and pick-up note, no amounts, a tick "ritirato" with "Annulla" for 6 s, a count such as "31 di 38 hanno ritirato", uncollected rows on top. Families never tick anything. When a round is under its minimum within three days of closing, the coordinator sees "Ci mancano 3 kg di riso!" with "Copia il messaggio", then three choices: "Aspetta ancora 3 giorni", "Salta questo giro", "Conferma lo stesso". Typography: system fonts only. Title "La Sporta" in Georgia, 'Times New Roman', serif, 28 px bold, with "gruppo di acquisto solidale" at 16 px beneath and nothing else in the header. Everything else in system-ui, 'Segoe UI', Roboto, Arial, sans-serif: body 20 px with line-height 1.5, days left 28 px bold, button labels 21 px bold, tabular numerals, nothing below 16 px, lines under 60 characters, enlargeable to 200% without breaking. Voice: the group chat, "tu", short plain sentences, no jokes. Exact lines: "Ordine salvato. Puoi cambiarlo fino a martedì sera." (weekday of that round's closing); "Adesso non c'è niente da ordinare. Ti avvisiamo nel gruppo."; "Non è stato salvato. Riprova tra un momento."; "Questo ordine è chiuso. Se ti serve qualcosa, scrivi nel gruppo."; "Questo link non è valido. Chiedi il tuo nel gruppo."; "Senza linea. Segno lo stesso, salvo appena torna."; "Copiato. Incollalo dove vuoi." Entrance: the first response already contains greeting and cards as text, so at 0 s the screen is readable; cards then settle 8 px upward, staggered 60 ms, 240 ms each, cubic-bezier(.2,.8,.2,1), bars fill in 600 ms, and everything rests by 1 s. Open screens refresh every 60 s, so bars and days left move by themselves. Interaction: every control at least 56 px high, with a pressed state (2 px inset, 8% darker) and a 3 px ink focus ring; no dialogs over content, confirmations appear inline. Keyboard: Tab follows reading order, Enter or Space activates, + and - or ArrowUp and ArrowDown change a focused quantity, arrows move through list rows, Space ticks, Escape closes a detail or skips an animation. Phone (from 320 px): one column with a 64 px bottom bar of tabs. Wide screen (900 px and up): list on the left, detail on the right, 1100 px at most, so the coordinator reads totals beside the family split. Signature moment: closing a producer ("Chiudi l'ordine" or "Conferma lo stesso"). 0-250 ms the button sinks; 250-1100 ms the family lines slide together and stack into one line per product; 1100-1700 ms each quantity counts up to its sum; 1700-2000 ms a brown rule draws and the total lands; 2000-2300 ms the green "Copia per il produttore" rises. It copies four plain lines: "La Sporta - ordine per la riseria", "Riso Vialone Nano 1 kg: 23 pacchi", "Riso Carnaroli 1 kg: 4 pacchi", "Totale: € 101,80". The resting state is that totals page with the split by family below. Hidden detail: for each producer closed this month one more drawn mark pokes out of the bag by the title. The app never sends anything: no WhatsApp, email or notification; it only prepares text to copy. Privacy is enforced by the service: a family token returns that family's data plus anonymous group totals, never another name, order, amount or tick. No sound anywhere. Reduced motion: no stagger, bars and totals appear final, the closing shows the finished list at once. Without signal: the open screen and the Thursday list stay usable from local storage (key sporta-v1); ticks and saves wait in a queue with unique ids, retried every 15 s and on reconnection, last write wins per line; a small service worker keeps the shell so a reload still opens the last list. Fallback without clipboard: the text appears selected in a box to copy by hand. Performance: under 150 KB in total, no libraries, first content within 2 s on a slow phone connection, refresh paused when hidden, animation on transform and opacity only. Persistence: one data.json with "schema": 1, written atomically, one dated backup a day kept 30 days. Never: installation, sign-up, passwords, advertising, tracking, pop-ups. Deliver as one file, server.js for Node.js 18 or later using the standard library only, which serves the whole interface inline, creates data.json beside itself, prints the coordinator, treasurer and duty links at first start and opens with a five-line Italian note on how to start it; no external files, fonts, images or third-party requests. Done when: (1) a member over 60 opens a personal link and saves an order unaided in under 2 minutes; (2) closing a producer yields totals equal to the sum of the family orders, pasted without retyping; (3) the treasurer sees who still owes at a glance and ticks "pagato" in one tap for each of the 38 families; (4) with the signal off the Thursday list accepts ticks and saves them all when it returns; (5) no family link reveals anything about another family. DESCRIPTION A straw-coloured page with a small woven bag drawn beside the words "La Sporta". A family taps its link in WhatsApp and reads, in large dark letters, "Buonasera, famiglia Rossi"; below, paper cards name the producers open now, the nearest closing first, each with a tiny brown drawing, a pumpkin bar creeping towards the group minimum and the days left written bigger than anything else. One leaf-green button says "Ordina". Quantities go up and down with two broad buttons, the total follows, and a plain sentence confirms the order was saved. The coordinator's link shows the same month from above: nine producers, 38 names, and a warning already worded when the rice is three kilos short. When she closes a producer, the families' lines gather into one short list, the numbers count up, the total lands and a green button copies it, ready to paste. The treasurer sees amounts beside transfer codes and ticks who has paid. On Thursday evening, in the parish hall, a helper ticks "ritirato" family by family, even when the signal drops at the back of the room. VISUAL TECHNIQUES - Single-file Node.js service, standard library only, serving one inline interface and a small set of same-origin actions - Role by secret link: 20-character random tokens for 38 families, coordinator, treasurer and duty helper, every response filtered on the service to what that role may see - One versioned data.json: families, producers, products (pack or by weight), rounds with price snapshots, order lines, real weights, payments, pick-ups; atomic writes and daily backups kept 30 days - Integer-cent arithmetic with half-up rounding for weighed goods and Italian formatting (comma decimals, "€ 12,00") - Round state machine aperto / chiuso / saltato / consegnato, with the three below-minimum choices - Local queue of unique-id operations in local storage, replayed every 15 s or on reconnection, plus a small service worker for the shell - First paint as text in the first response, then a 60 ms staggered card settle and a 600 ms bar fill - Minimum bar: pumpkin #C97A1E fill on a 30% brown track, always with a number label and a written tick when reached - Closing choreography with FLIP transforms: family lines stack into product lines, tabular numerals count up, a rule draws, the copy button rises - Inline line drawings in woven brown #8A6A3B: a bag with a hatched weave and nine producer marks; the bag fills as producers close - Text builders for producer totals, the missing-quantity message and the payment reminder, with a selectable box where copying is refused - Large-type system: 20 px body, 28 px deadlines, 56 px controls, 3 px ink focus ring, safe at 200% enlargement - Two layouts: one column with a 64 px bottom tab bar; list and detail side by side from 900 px - Reduced-motion variant with every state shown final INTERACTION MODEL Opening a link decides the role: family, coordinator, treasurer or duty helper; an unknown link shows the invalid-link line. On a family link, tapping "Ordina" or any producer card opens its products; minus and plus (tap, click, + and -, ArrowUp and ArrowDown) change a quantity and the total follows; "Salva l'ordine" stores it and shows the saved line; after closing the screen is read-only with the closed-order line. "Il mio mese" shows amount, code and pick-up, and a chip or typed note sets who collects. On the coordinator link, tabs switch between "Produttori", "Famiglie" and "Giovedì"; tapping a family opens its order to fill in its place and "Copia il link" copies its personal link; on a producer she edits prices and the weekly line, opens a round, copies the missing-quantity message, chooses "Aspetta ancora 3 giorni", "Salta questo giro" or "Conferma lo stesso", closes the order, copies the totals and later types real weights. On "Pagamenti" one tap or Space ticks "pagato" (tap again to undo), "in contanti" marks cash, "Copia il promemoria" copies a reminder. On "Giovedì" one tap or Space ticks "ritirato", "Annulla" undoes it within 6 s, and ticks made without signal are queued and saved later. Tab moves in reading order, Enter or Space activates, arrows move through rows, Escape closes a detail or skips the closing animation. All targets are at least 56 px. With reduced motion nothing slides or counts; every screen appears in its final state.
What's inside this prompt
The sections of this prompt, in order, with their length.
- Overview 390 words
- Mood 167 words
- Structure 285 words
- Typography 147 words
- Entrance 164 words
- Signature moment 437 words
- Description 182 words
- Visual techniques 293 words
- Interaction model 245 words
More app prompts
Hearthbook
An app where my partner and I write down what we spend on the house, so we can see each month whether the money will last.
Example by Askmill
Panjski dnevnik
I keep 14 hives near Ljubljana and want to log inspections on my phone with gloves on.
Worked example (simulated interview)
The Under-9s, Saturday Sorted
I coach an under-9s team in Bristol and want one app for availability, lifts, oranges and kit washing.
Worked example (simulated interview)
Squashed Bank - One Bitcoin in Dollars
A one-screen price page in the spirit of preev.com: one huge orange number, the cost of one Bitcoin in US dollars right now, resting like a weight on the roof of a
Customer prompt, public
Write yours
This prompt was written for someone else's idea. Askmill interviews you about yours, one plain question at a time, then writes the prompt your AI builder needs: $4.00 for a public prompt, $8.00 for a private one.