Skip to content

Web Home: add Recent section (recently-opened cloud files) like the mobile app #17

Description

@ehsan6sha

Summary

Mirror the mobile app home Recent section on the web home (files.fx.land/app/): a horizontal strip at the TOP showing thumbnails of recently-opened cloud files, same style as native (lib/features/home/widgets/recent_files_section.dart).

Native reference

  • SizedBox(height 120) horizontal ListView, max 10; header Recent (titleMedium, w600); empty state No recent files.
  • Image/Video = 80px media card: cover thumbnail + bottom gradient + filename (white 10px) + video play badge. Audio/Documents/other = 100px doc card: 48x48 colored-icon tile + filename. Colors: image green, video red, audio orange, doc blue, else grey.
  • Data: device-local Hive box recent_files, capped 30, sorted accessedAt desc, dedup. Recorded when a file is opened.

Web plan (advisor-reviewed: Gemini + Codex)

  • New device-local, per-user, encrypted IndexedDB store (WebRecentFilesService) keyed by (bucket, objectKey); cap 30; dedup + move-to-top; reset on sign-out; owner-scoped (same HKDF+AES-GCM rationale as web_listing_cache, separate box).
  • Thumbnails for IMAGES only: downscale decrypted bytes to ~160px via dart:ui instantiateImageCodec, store encrypted PNG with a byte cap; icon-only on low-end devices; icon cards for audio/docs/video.
  • Record once after a successful open (no failed opens, no FutureBuilder dup), hooked in web_bucket_screen open paths.
  • Tap a Recent card reopens the file by reusing the existing preview via /b/?open= (no extraction of the working open flow).

Acceptance

Recent strip on top of web home in native style; updates after opening files; tap reopens; per-user/device-local/capped; low-RAM safe; no regression; analyze + tests + web build green; live.

Part of the mobile->web parity work.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions