diff --git a/frontend/src/lib/components/DashboardResumeStrip.svelte b/frontend/src/lib/components/DashboardResumeStrip.svelte
new file mode 100644
index 00000000..a2cc482e
--- /dev/null
+++ b/frontend/src/lib/components/DashboardResumeStrip.svelte
@@ -0,0 +1,36 @@
+
+
+{#if lastVisited}
+
+{/if}
diff --git a/frontend/src/lib/components/DashboardResumeStrip.svelte.spec.ts b/frontend/src/lib/components/DashboardResumeStrip.svelte.spec.ts
new file mode 100644
index 00000000..9d930da4
--- /dev/null
+++ b/frontend/src/lib/components/DashboardResumeStrip.svelte.spec.ts
@@ -0,0 +1,43 @@
+import { describe, it, expect, afterEach } from 'vitest';
+import { cleanup, render } from 'vitest-browser-svelte';
+import { page } from 'vitest/browser';
+
+import DashboardResumeStrip from './DashboardResumeStrip.svelte';
+
+afterEach(() => {
+ cleanup();
+ localStorage.clear();
+});
+
+describe('DashboardResumeStrip', () => {
+ it('renders nothing when no last-visited document in localStorage', async () => {
+ render(DashboardResumeStrip, {});
+ const strip = page.getByTestId('resume-strip');
+ await expect.element(strip).not.toBeInTheDocument();
+ });
+
+ it('shows the strip with link when localStorage has a document', async () => {
+ localStorage.setItem(
+ 'familienarchiv.lastVisited',
+ JSON.stringify({ id: 'doc-123', title: 'Geburtsurkunde 1920' })
+ );
+ render(DashboardResumeStrip, {});
+ const strip = page.getByTestId('resume-strip');
+ await expect.element(strip).toBeInTheDocument();
+ const link = page.getByRole('link', { name: /Geburtsurkunde 1920/ });
+ await expect.element(link).toBeInTheDocument();
+ await expect.element(link).toHaveAttribute('href', '/documents/doc-123');
+ });
+
+ it('uses title fallback text when title is empty', async () => {
+ localStorage.setItem(
+ 'familienarchiv.lastVisited',
+ JSON.stringify({ id: 'doc-456', title: '' })
+ );
+ render(DashboardResumeStrip, {});
+ const strip = page.getByTestId('resume-strip');
+ await expect.element(strip).toBeInTheDocument();
+ const link = page.getByRole('link');
+ await expect.element(link).toHaveAttribute('href', '/documents/doc-456');
+ });
+});
diff --git a/frontend/src/routes/documents/[id]/+page.svelte b/frontend/src/routes/documents/[id]/+page.svelte
index 2d9f30e1..46c17737 100644
--- a/frontend/src/routes/documents/[id]/+page.svelte
+++ b/frontend/src/routes/documents/[id]/+page.svelte
@@ -113,6 +113,14 @@ onMount(() => {
localStorageRestored = true;
+ // Track last-visited document for the dashboard resume strip
+ if (doc?.id) {
+ localStorage.setItem(
+ 'familienarchiv.lastVisited',
+ JSON.stringify({ id: doc.id, title: doc.title ?? '' })
+ );
+ }
+
function onKeyDown(e: KeyboardEvent) {
if (e.key === 'Escape') {
if (activeAnnotationId) {