09 / 15 · Design
What the interface looks like
A concrete visual reference for models rebuilding FileLoveNote: a quiet sidebar, a readable note, source files close to the writing, and controls that stay out of the way.
This build package uses cream paper, green navigation and serif headings. The app uses Inter, light gray or mint-tinted surroundings, a white writing surface and blue actions. Follow the app colours and measurements below.
The drawings are labelled reference wireframes with fictional content, not screenshots or a promise of pixel-perfect reproduction. They describe the default Simple layout in the current local code. English labels are the reconstruction target; some existing app labels still use Dutch. This chapter does not change the running app.
Visual intent
- The open note is the main object. Navigation supports reading and writing; it does not look like a task dashboard or a media feed.
- Use restrained type, generous writing space, thin borders and soft selection backgrounds. Reserve strong blue fills for primary actions.
- Keep icons small and consistent. Prefer familiar outline symbols with visible labels or accessible names; do not rely on colour alone.
- Keep the same hierarchy in light and dark mode. Dark mode changes the palette rather than the layout.
- Use the rounded 1:1.618 spacing family: 3, 5, 8, 13, 21, 34 and 55px. The current Simple layout uses a fixed sidebar; do not force every screen into a literal 38.2% / 61.8% split.
Desktop: sidebar and writing area
- Navigation and creation: two equal tabs, Notes and Files, at the top of the sidebar. Below them, place two equal blue buttons: New note and New folder. Align text and icons to the same grid.
- Folders and notes: optional folder pills in two columns, followed by note rows. A soft blue row marks the open note. Multi-selection adds a stronger blue edge; hover stays subtle. Long titles truncate instead of widening the sidebar. The list scrolls independently.
- Persistent footer: settings and sync icons sit beside a short storage/sync status. It remains at the bottom while the list scrolls. Reserve a thin 3px loading strip above the list so loading does not make rows jump.
- Writing area: keep the page white in light mode, with a modest title and left-aligned prose inside the centered reading column. Do not stretch prose across the whole screen or add a permanent large formatting toolbar.
- Source content: media lives inside the note as an image, player, reference card or file link. A small View in Google Drive link sits beneath a Drive source. The source remains in Drive; the note adds context around it.
Above 860px, the list and editor are visible together. In Simple mode, the extra file/Drive columns and floating desktop column-switcher are hidden. Choosing Files replaces the sidebar content with the Drive browser in the same column; it does not navigate away from the note or add another column. An explicitly saved Classic layout can retain its existing panel arrangement.
Mobile: one active view at a time
- Use the full width for the active list or editor. Opening a note shows the editor; provide an obvious way back to the list. Do not shrink the desktop columns into two narrow panels.
- Keep tabs and create buttons at least 44px high on mobile. Touch targets are at least 44 × 44px even when the icon itself is smaller.
- Keep bottom actions reachable in both list and editor states. Sync sits to the right of the command control; settings remains available in the bottom bar rather than duplicated in the sidebar footer.
- Reserve bottom padding for the toolbar and safe-area inset. Menus must stay above it and follow the visible viewport when the keyboard appears.
- Prose wraps to the screen width. Tables and other genuinely wide content may scroll inside their own container; the whole page must not scroll sideways.
Colours and surfaces
These values come from the current Calm and Calm Dark theme definitions. Use semantic tokens so changing theme does not require redesigning each component.
| Role | Calm / light | Calm Dark |
|---|---|---|
| Page / outer background | #f5faf6 | #111815 |
| Editor / raised surface | #ffffff | #17211d |
| Sidebar / soft surface | #f8f8f9 | #1d2924 |
| Primary text | #29353c | #edf4ef |
| Muted text | #6d777c | #a9b7af |
| Subtle border | #e3e5e5 | #2c3a33 |
| Primary action / link | #3f7fd4 | #6ea8f2 |
| Selected row (soft) | #e9f7ff | #1b3347 |
| Success | #167044 | #62c893 |
| Warning | #f28a02 | #f7ad45 |
| Destructive action | #cf4632 | #f07868 |
Use the softer surface for sidebar chrome and input backgrounds. Use the editor surface for the writing pane and raised controls. A normal row has no heavy outline or card shadow. Reserve elevation for menus, dialogs and overlays. Focus uses a visible blue border/ring; destructive actions use red text or a clearly labelled confirmation, never an ambiguous red icon alone.
Typography and measurements
The app uses self-hosted InterVariable, with system sans-serif fallbacks. Retain the font licence if redistributing the font. Use a monospace stack for code. The Georgia heading on this documentation page is not the app’s note-title style.
| Element | Size and weight | Layout rule |
|---|---|---|
| Note body | 16px / 400 | Line height 1.7; letter spacing −0.011em; paragraphs 0.4em top/bottom. |
| Note title / H1 | 20px / 650 | Line height 1.25; letter spacing −0.01em. Not a giant marketing headline. |
| H2 / H3 / H4 | 18 / 16 / 14px, weight 650 | Use weight and spacing for hierarchy. Headings do not become large banners. |
| UI chrome | 14px base; 11px metadata | Simple tabs use 13px, create labels 12px, note-row titles 13.5px / 600. |
| Desktop sidebar | 360px wide; 21px side gutter | 8px gaps between paired controls; 13px between groups; a 26px icon column. |
| Controls and rows | 34px desktop tab/create height; ≥44px note rows | Compact desktop footer icons are 26px with 16px glyphs. Use ≥44px touch targets on mobile/coarse pointers. |
| Corners | 8px controls; 10px note rows; 13px menus | Folder pills use fully rounded ends. Text highlights keep square corners. |
Lists follow the note’s text rhythm. Task checkboxes align with the first text line rather than sitting in a separate oversized control row. Quotes use a thin left rule and muted text. Inline code gets a quiet filled background; code blocks can scroll internally. Links use blue and remain visibly recognisable as links.
What each interface component should look like
| Component | Appearance and placement | Interaction and state |
|---|---|---|
| Notes / Files sidebar | Compact paired tabs, aligned create controls, folder pills and single-line rows. Files uses the same sidebar width with a path, search and file entries. | Keep the note open when changing tabs. Indicate the selected tab, folder and note separately. Load Drive when the user opens Files. |
| Slash menu | A compact floating panel at the caret, about 274px wide but bounded by the viewport. Rounded 13px corners, soft translucent surface, thin border and restrained shadow. Grouped commands with small coloured icon badges. | Show a visible keyboard selection. Arrow keys and Enter act on the menu; Escape closes it. Scroll long menus internally and keep them above the bottom bar. |
| Drive picker | An inline/caret-anchored panel in the note, not a new full-page app. Search, folder path, status, file rows and Load more are distinct areas. | Show loading, no results, disconnected and retry states as text. One choice inserts a source; canceling inserts nothing. Preserve the editor’s insertion point. |
| Command palette and Markdown help | Centered native dialogs with a dim backdrop. Maximum width 618px, constrained by the screen. Search and command rows are clear; help uses a scrollable body beneath a fixed title/close row. | Use ≥44px options/close targets, visible focus and keyboard shortcuts. Escape closes and returns focus to the previous control. |
| Media and previews | Images fit the reading width. Audio/video show a player or compact reference with title and progress. PDF/EPUB use their own readable preview. Keep the note’s text around the source. | Show a placeholder when a thumbnail cannot be generated. A paused or failed player must not make the rest of the note unusable. |
| Settings | Grouped sections for appearance, layout when applicable, sync, the Google Drive connection, account and legal links. Keep descriptions secondary to controls. | Show the connected Drive identity and state. Keep advanced reset/delete actions behind a separate disclosure and an explicit confirmation. |
| Login / signup | A calm public page with the FileLoveNote wordmark, a clear Google sign-in action, a product introduction and a small product preview. Public/legal pages include the proof-of-concept banner. | Signup shows the consent requirement; denied/configuration errors appear beside the sign-in flow. Do not add another login method. |
| Canvas | A spatial working area of text, note or media cards with visible connections. Its toolbar supports the canvas rather than replacing note navigation. | Pan/zoom and selected-card states remain clear. Build this only when the canvas extension is in scope. |
Loading, empty, selected and error states
- Empty: a short No notes yet message and one New note action in the editor area. Do not fill the screen with invented charts or sample user data.
- Loading: keep stable space for the list’s thin loading strip. If a local note exists, render it while Drive refreshes in the background; do not replace it with a full-page spinner.
- Local / queued / syncing: a concise status beside sync, with a pending count or progress where relevant. A server ticket is not shown as Synced.
- Failure: keep the current text visible, explain the problem and offer retry. Colour alone does not communicate failure. Disconnected Drive has a clear connect/reconnect action.
- Deletion / movement: show a pending row state and keep the exact affected selection clear. Confirmation distinguishes permanent Delete from managing old Trash.
- Selection and focus: the open note gets a soft background; bulk selection adds an edge/count/action bar. Keyboard focus gets a visible ring. Hover must not impersonate either state.
Visual implementation prompt
Read prompt/design.html together with the Solution Intent, Solution Design and requirements.
Use the app visual reference, not the cream/green documentation shell.
Build the default Simple desktop workspace: 360px sidebar, Notes/Files tabs, paired create buttons, optional folder pills, scrolling note rows and persistent settings/sync/status footer.
Use a white editor surface in light mode and a centered reading column capped at 42rem. Use Inter, 16px/1.7 prose and a modest 20px/650 note title.
Use the documented Calm/Calm Dark colour tokens, blue actions, subtle borders and quiet selection states. Match the spacing and component measurements in this chapter.
At 860px and below, show the list or editor as a full-width view, preserve bottom actions and use touch targets of at least 44px.
Keep slash commands and the Drive picker contextual to the caret. Keep dialogs, empty/loading/error states and keyboard focus consistent with the reference.
Use fictional test content. Preserve storage, authentication, sync and deletion contracts; a visual match must not add new behavior.
Compare the implemented screen with this chapter at desktop width and at 390px in BrowserOS Neo. Report visual differences separately from functional test results.Acceptance checks for visual similarity
- At a wide desktop viewport, the sidebar is 360px and the editor gets the remaining space. Long text remains inside the 42rem reading measure; there is no unnecessary third column in Simple mode.
- The sidebar has aligned tabs, paired creation buttons, rounded folder pills, readable note rows and a stable footer. Files replaces its contents without losing the note.
- Light and dark modes use the specified text/surface/action hierarchy. The note title is 20px, body text 16px and the writing area uses Inter.
- At 390px, the list and editor are usable separately, with no horizontal page overflow. Bottom actions and caret menus remain visible above the device edge and keyboard.
- Test keyboard focus, open/selected rows, empty content, Drive disconnection, a queued change and a failed sync. Every state has readable text or an accessible label.
- Keep visual evidence separate from functional evidence. A convincing screenshot does not prove Drive storage, account isolation or safe deletion.
Use the functional scenarios in V03 and V15 alongside these checks. Security boundaries remain in 08 Security.
Source and scope of this reference
The measurements and colours were checked against local commit 867ca8d on 26 October 2026: src/views/theme-system.js, src/views/scale-system.js, src/views/content-renderers.js, src/views/command-menu.js, src/views/topbar-renderers.js and client/paper/drive-picker.ts. This is a code-based interface reference, not a new inspection of production or a redesign request. Filenames and implementation identifiers stay unchanged.