Skip to content
Independent · Cairo, EgyptLet's talk
All work

Independent product / 2026

Keepall

A visual library for
links, images, and files.

I built Keepall for people who recognize references by how they look. Link thumbnails and Open Graph images sit beside saved images and previews of Markdown, text, and PDF files.

The aim is to scan different types of content in one library, then open a larger preview when you need a closer look.

The real Keepall library with image, Markdown, video, PDF, text, and article cards.
Images, links, and document previews in the same library. This screenshot and the recordings below use the running app with sample content.

My role

I defined the product, designed its workflows, directed revisions, and reviewed the result. AI agents generated much of the implementation under my direction.

The product constraint

No account is required. The library stays in the browser. That removes signup, but backup and transfer must be explicit because data does not sync automatically. See the recovery flow.

Design decisions

01

Mixed-media cards

Show the content before opening it.

The grid puts link thumbnails, saved images, and document previews together. Users can scan their references visually before choosing one to open.

Captured steps 1 / 4

The actual library places an image, a Markdown document, and a note together. Each card gives its content a different amount of space.

Actual Keepall app capture · October 2026

What was wrong

A single fixed card structure left gaps when an image had no title. It also blurred the difference between the source, the file, and a personal note.

What I changed

I gave each type a preview that fits its content. Links show a thumbnail or Open Graph image when available. Images keep their proportions. Markdown and text files show text, and PDFs show a page preview. Filenames, sources, and personal notes remain separate.

Why this choice

The previews help users recognize an item without opening each file. Collection and tag controls keep a shared position across content types. Untitled images do not reserve an empty heading.

I also rejected a list enclosed in another bordered panel. The list uses open rows with a small media slot, a title, and a secondary line. It offers a compact way to scan the same library.

Implementation notes and source

The content component selects a layout by item type. Untitled images omit the heading. Document and note previews use reading-card layouts. List view uses compact rows and favicon-only link thumbnails, so it does not need a large link image to render each row.

02

Quick Preview

Inspect a larger preview from the keyboard.

Press Space on an item to open Quick Preview. Use the arrow keys to move between items while the library stays behind the preview. Press Escape to close it, or Enter to open the full item.

Captured steps 2 / 3

Preview keeps the library behind the document. Back and Next browse items. Open full item continues into the reader.

Actual Keepall app capture · October 2026

What was wrong

I rejected a sequence that closed Preview, exposed the library, and then opened the full item. The extra step broke the connection between the views.

What I changed

I asked for the transition to start at the item already on screen. The source stays available while the full view opens.

Why this choice

Users can inspect an item at a larger size before deciding to open it. The recording shows a Markdown document moving from its card to Quick Preview and then to the full reader.

Back and Next also support pointer input. Text fields and video controls keep their own keyboard behavior. The up and down keys scroll when focus is inside scrollable preview content.

Implementation notes and source

The source and destination share the item identity. Keepall captures the source geometry before the route changes. Keyboard input and reduced motion skip the spatial transition; unsupported browsers still open the item.

03

Capture and Review

Use the same controls in Capture and Review.

Users can save an item without choosing a collection. These items stay in Unsorted for later review.

Captured steps 3 / 5

The saved note appears first in Review. The collection and tag controls sit below the content. Next browses without filing the item.

Actual Keepall app capture · October 2026

What was wrong

Capture and Review used different organization controls. Review also moved as the item's tags changed, and Skip repeated what Next already did.

What I changed

I brought the collection and tag controls into one shared design. I reserved space for suggestions and the Create action, and kept Back and Next for browsing.

Why this choice

Next leaves the item in Unsorted. Tags apply immediately. Choosing a collection and pressing Apply changes files the item and advances the review. Undo can reverse that action while Review stays open.

Closing an unsaved Capture draft asks whether to discard it. Keep editing restores focus to the input, with the text intact.

Implementation notes and source

Capture and Review use CaptureOrgPanel, with a compact layout for Review. Suggestion rows are measured to fit the available width. Review keeps its queue while items change; undo records the action to reverse. Draft protection applies to Capture, not to every change in Review.

04

Image tools

Place image tools and results next to the image.

Text recognition and color extraction worked. Their placement still made the image workflow harder to follow.

Captured steps 2 / 4

The palette and recognized text sit below the source image. Each result section can close independently.

Actual Keepall app capture · October 2026

What was wrong

The first version put the tools in the right inspector. In a gallery, that separated the controls from the image they acted on.

What I changed

I moved the commands into each image's menu. I put the palette and recognized text below that image, before the personal notes.

Why this choice

Each image shows its own results. Click a color to copy its hex value, or open its menu to find nearby colors in the library.

I also replaced tall swatches with shorter capsules. The hex value and copy feedback stay together, and the capsules wrap on narrow screens.

Implementation notes and source

The image tools save results against the image asset. Color search uses OKLab distance. The search radius is a tuning choice, not a tested measure of visual similarity.

07

Backup and recovery

Explain storage and backup limits.

No account removes signup. It also means the browser holds the library. I made export and recovery explicit parts of the product.

Captured steps 3 / 4

Import first compares the current library with the selected backup. This recording uses a fresh export of the sample library, so the counts match.

Actual Keepall app capture · October 2026

Import compares the backup with the current library before making changes. Merge and Replace are separate choices. Replacement needs a second confirmation because it removes the current library.

Storage limits

Clearing site data can erase the library. A downloaded backup must stay outside the browser. Folder backups need a supported browser, folder permission, and the app running. If permission expires, Keepall offers a reconnect action.

Implementation notes and source

The export reads a consistent snapshot. Restore prepares the data before committing the library changes in one transaction. The recording shows the comparison and confirmation steps; it cancels before replacement.

Summary

Current result

Keepall shows different content types together so users can browse by appearance. Quick Preview gives them a larger view while keeping the library open.

Friends use the app and extension, and their early feedback has been useful. I have not measured a change in task completion time.

The earlier problems above come from the revision history. The recordings show the current app with sample data.

Related projectThe Keepall website