Jewelry AI · home screen

Your home screen keeps the five newest jobs and hides none of them

The strip is a fixed count with no status filter, so a failed job sits in it exactly where its creation time puts it. On a finished card the picture is the result rather than the photo you uploaded, and the caption is written by the tool that produced the job.

A fixed count, in creation order

The block at the top of the home screen takes the jobs the app currently holds, sorts them by creation time with the newest first, and keeps the first five (apps/jewelry-mobile/src/features/home/recent-generations.tsx, read against the application source in August 2026).

Five is a constant in the client. It is not something the server sets, and it is not attached to a plan, so there is no configuration anywhere that would make the strip longer or shorter.

The list applies no status filter. A job that failed occupies the same list as a job that finished, at the position its creation time gives it. Nothing is removed from the strip because it went wrong.

Both rules together explain the two impressions this screen produces: a strip that looks short is a fixed count doing its job, and a failure sitting among your latest work is the absence of a filter, not a defect.

What a card is actually drawing

The picture on a card is selected by a single expression in recent-generations.tsx, and it has two fallbacks behind it.

A completed job is drawn with its result.
For a completed job the card uses the result address first. This is the case the strip is written for: the finished card shows what came back, not what went in.
A completed job with no result address is drawn with your upload.
The selection is written as result address first, input image second. When the result address is absent, a completed card can therefore show the photo that started the job.
A job that is not completed is drawn with your upload by rule.
Anything other than a completed status uses the input image. Recognising your own photo on a card is normal, and the badge is what separates the two reasons for it.
A picture that cannot be loaded becomes a placeholder, not a gap.
When nothing can be drawn in that position, the card falls back to a studio placeholder graphic (components/ui/thumb-placeholder.tsx:20-22). The card keeps its size and its badge either way.
The badge carries three states and no more.
Processing, completed and failed are the values the badge can take (components/ui/status-badge.tsx:9-13). There is no fourth state for partially finished work.

How a card is captioned

The caption is decided by the tool that produced the job, not by the content of the picture. Model generation produces a caption named after the jewellery category the job belongs to. A tool that is not tied to a category produces a caption named after the tool itself (recent-generations.tsx).

That makes the caption a reliable statement about route and an unreliable one about subject. A caption naming a category tells you the job went through the category-based route; it does not describe what is in the frame.

If you work in one category all day, every model-generation card will carry the same caption. That repetition is the rule working, and it is not a sign that the strip has stopped updating — the badge and the time are the parts that differ from card to card.

Two corrections that already landed

Two defects in this strip are recorded in the code that fixed them. Both are past behaviour, described here only because a seller who met them once may still be reading today's screen through them.

The caption defect. Before the correction, a job produced by a tool that is not tied to a jewellery category was captioned on the home screen with a category name it never had. The comment beside the caption code in recent-generations.tsx records the fix, and the caption rule described above is what replaced it.

The relative-time defect. Before the guard in apps/jewelry-mobile/src/lib/relative-time.ts was added, this card brought the whole application down on a device whose engine lacked the relative-time formatter; the comment records it as a P0 dated 2026-08-10, and the failure followed the first generation. The absolute fallback described above is that guard.

Neither behaviour is current. A category name on a card today means the job really was a category-based generation, and an absolute time is the fallback rather than the crash it replaced.

An empty strip while you are connected

With the server reachable and no jobs on the account, the strip is replaced by a short empty state: a line stating that there are no generations yet, and a button that starts your first image. The button moves you to the Create tab (recent-generations.tsx:86).

The home screen has no pull-to-refresh. Its scrolling container is not given a refresh control (components/ui/screen-container.tsx:59-66), so pulling down changes nothing; a button inside an empty state is the only manual way to ask the screen to look again.

The empty area behaves differently when the server cannot be reached, and that case — together with everything else the home screen does without a connection — is settled on a separate page rather than here.

Before you report a card as wrong or missing

Each line below is a check you can make on the screen itself, in the order the card is assembled.

  • Count the cards. Five means the list is full and the job you are looking for may simply be older than the five newest.
  • Read the badge before the picture. A failed job belongs in this list, and the badge is the whole of what the strip says about it.
  • If the picture is your own photo, check the badge again. Not completed means your upload by rule; completed means the result address was absent.
  • If the picture is a placeholder graphic, treat it as a card that could not draw its picture, not as a job without a result.
  • Check the caption against the tool you used, not against the image. A category name means the category-based route.
  • Check whether the time is absolute. A clock time or a date is the fallback format, and the text was frozen when the card was drawn.
  • For anything about why a job ended as it did, leave this screen: the strip does not carry that information.

What the strip does not tell you

These are absences by design, not gaps waiting to be filled in.

  • Why a job failed. The badge names the outcome and stops there.
  • Whether a failed job can be repeated, and what repeating it would involve.
  • How long a job takes, or how often jobs of a given kind succeed.
  • Anything about work older than the five newest jobs; that work is not represented on this screen.
  • What the picture contains. The caption reports the route the job took, not the subject in the frame.
  • Which categories or tools are open for generation. The strip only reports jobs that already exist.
  • Anything the home screen does when the server cannot be reached.

Neighbouring questions this page leaves alone

How the home screen behaves when the server cannot be reached is a separate subject and is not answered here.

The same picture rule appears on the library and collection screens, where an uploaded photo on a card is used as a diagnostic; how those surfaces report a failure, and what an empty library means, are settled where those screens are documented.

The strip has no controls: no filter, no tab, no selection. Anything you would do to a list rather than read from it belongs to another surface.

Questions

Why does my home screen show only five recent images?

Because the strip keeps the five newest jobs by creation time and discards the rest of the list before drawing (apps/jewelry-mobile/src/features/home/recent-generations.tsx). Five is a constant in the client: the server does not set it and it is not a property of a plan, so the length of the strip is not a report on how much work exists.

Why is a failed generation showing on my home screen?

The strip applies no status filter. It is built from jobs rather than from successful jobs, so a failure keeps the place its creation time gives it, and the badge on the card names the outcome (components/ui/status-badge.tsx:9-13). Why it failed, and what repeating it would involve, are not reported on this screen.

A card shows the photo I uploaded instead of the result. What does that mean?

Two situations draw your own photo. A job that has not completed is drawn with the input image by rule. A completed job is drawn with its result address first and with the input image only when no result address is present (recent-generations.tsx). The badge is what separates the two. A card that shows a studio placeholder instead is one that could not load a picture in that position at all (components/ui/thumb-placeholder.tsx:20-22).

Why does a card show a date, and why does the time never move?

The time text is produced when the card is first drawn (recent-generations.tsx:21), so it does not advance while you stay on the screen. Where the device's JavaScript engine does not provide relative-time formatting, the card uses an absolute form instead: a clock time for a job from the last twenty-four hours and a date for anything older (apps/jewelry-mobile/src/lib/relative-time.ts).