Guide
A complete reference for Études — a practice journal for musicians. Twenty-eight sections, organized from first use to the underlying data model.
Introduction
Études is a practice journal for musicians. Not a tracker, not a platform — a journal, the kind bound in cloth, left open on a music stand.
Three questions
Every day Études answers three questions, in order. What will I practice? — intention, set before playing. What am I practicing, right now? — attention, held while playing. What did it mean? — reflection, written after. Everything else is in service of these three moments or it does not belong.
Measurement and meaning
Études must count time — or it is just a notebook. It must also let time mean something — or it is just a stopwatch. The timer is present but never the point. The ring closes but does not celebrate. The log accumulates but does not rank. Numbers appear in monospace; words appear in serif. That typographic hierarchy is the philosophical hierarchy.
What Études does not do
No streaks that punish rest. No gamification. No notifications. No AI-generated practice plans. No sentiment analysis of journal entries. No comparative metrics. No social features. No onboarding carousels. These omissions are deliberate.
Local by default
All data lives on the device — localStorage for journal state, IndexedDB for audio and PDFs. An optional cloud backup via Supabase is available when signed in. Audio recordings and PDF scores remain local always, regardless of sync status.
The North Star: "A quiet, literate place where practice is taken seriously — and the tool gets out of the way." Every decision in Études is measured against this sentence.
Getting Started
Études requires no account and no configuration to begin. Open it, and the journal is ready.
Setting targets
Open Settings (the gear icon in the header) and set a daily minute target. Weekly and monthly targets are optional — they drive the rings on those views. Targets do nothing until they are met, at which point accumulated time quietly shifts to IKB blue. No alarm, no modal, no congratulation.
The footer bar
The footer is always present. Left: the active timer readout and today's total. Centre: play/pause, rest, recording, and quick-note controls. Right: the metronome, tuning/drone, and a keyboard-shortcut reference. The footer is the one surface that spans all views.
Navigation
Seven tabs run along the left side of the header: Today, Week, Month, Repertoire, Routines, Programs, Logs, Notes. Each answers a different question at a different time scale. Press Esc to close any open drawer or modal. Press ? to open the keyboard help panel.
First steps
- Add a pieceGo to Repertoire and use the Add controls to create the first item — a technique exercise, a piece, or a study topic.
- Start a sessionReturn to Today and press play next to the item. The timer begins. The rest of the interface recedes.
- Close the dayWhen practice is finished, press Close the day. Write a reflection. The session archives automatically at midnight regardless — closing is optional but recommended.
The Seven Views
The navigation is the product's mental model. Each view answers exactly one question. Seven is the ceiling.
- TodayWhat am I practicing right now? The active surface: session stack, timer, recording, reflection.
- WeekWhat did I do this week, and what comes next? Bar chart, ring, weekly reflection, past days.
- MonthWhat have I been doing with my time? Calendar with intensity rails, monthly ring, monthly reflection.
- RepertoireWhat am I working on, as a musician? The full library with stages, time totals, notes, scores, recordings.
- RoutinesHow do I want to practice deliberately? Named arrangements loaded onto Today when needed.
- LogsWhat did I do, exactly, on each past day? The scrollable archive of session cards.
- NotesWhat have I been thinking about, independent of any session? Free prose, tags, wiki links.
Programs — concert program planning — is an additional view that sits outside the temporal spine. It is for performance planning, not practice.
Today
Today is the active surface. It is where practice happens, not where it is planned. The session stack, the timer, the recording, and the daily reflection all live here.
Session stack
A day is an ordered list of sessions. Each session has a type — Technique (I), Pieces (II), Play (III), or Study (IV) — and contains the items to work through. Sessions can be reordered with the ↑↓ arrows or a drag handle, collapsed when not in use, and re-added from the Add session control at the bottom.
Free mode and prescribed mode
In free mode (the default), each session shows all repertoire items of its type. The musician decides what to work on in the moment. In prescribed mode, a loaded routine replaces the stack with a specific arrangement — sessions in a fixed order, with pinned pieces, intentions carried from the routine, and optional targets. Free mode can be restored at any time without affecting the saved routine.
The four session types
- I · TechniqueScales, exercises, finger-independence studies, warm-ups, and preparatory material.
- II · PiecesComposed repertoire with composer, notes, stage, optional PDF score, and reference recording.
- III · PlayBlues, tunes learned by ear, improvisational material — anything worked out by listening rather than reading.
- IV · StudyScore analysis, silent study, listening practice, theoretical work. No clock pressure implied.
Warm-up
Any item can be marked as a warm-up using the ◔ toggle. Warm-up time accumulates separately from practice time and is excluded from the daily target and streak calculation. A small clock icon marks warm-up items in the session. The warm-up total is visible but subordinate — excluded from all rings and targets.
Adding pieces
The + icon in each session adds an existing piece from the repertoire. The FilePlus icon creates a new repertoire item inline. Either control is only visible on hover to keep the surface uncluttered during active practice.
Pinning — the Working On rail
Pinning an item from its expanded panel places it in the Working on rail at the top of Today. Pinned items persist across sessions and are surfaced as a reminder of ongoing work. They are not the same as routine pieces — they carry across all days regardless of what is loaded. Unpin from the same control.
Closing the day
Press Close the day to finalize and lock the timer. A prompt appears for any final reflection. Once closed, timer edits are locked until midnight or until the day is explicitly reopened. Reflections remain editable after closing. The day closes automatically at midnight regardless — the manual close is a deliberate act of ending, not a technical requirement.
Journal du jour
A single free-text reflection field at the bottom of Today. Written after practice, not before. It asks: How did today feel? What surprised you? This becomes the daily reflection in the archive. There are no prompts, no scoring, no analysis.
The Timer
One item is active at a time. Pressing play on a different item transfers the clock. No overlap, no ambiguity.
How time accumulates
Seconds accumulate into per-item, per-section, and total-today counters simultaneously. The footer shows the active item's running total, the current section total, and the daily total in monospace. Lifetime per-item time is stored separately from session time and never resets.
Rest
The rest toggle (R) pauses the practice clock and starts a separate rest counter. Rest time is tracked as restToday, shown in the footer as a secondary readout. It does not contaminate practice totals. Press R again, or press play on any item, to resume.
Targets
A daily target lives in Settings. Per-session and per-item targets can be set inline on Today by hovering over the time display — a small + target chip appears. Once set, the target reads as / 20′ next to the accumulated time. When time meets or exceeds the target, the number quietly shifts to IKB blue. No alarm. No completion state. A missed target is indistinguishable from no target at all — by design.
Started date
The first time an item accumulates any practice time, its started date is set automatically to that day. It can be overridden manually in Repertoire. Items with no practice time show no started date.
Day rollover
At midnight, yesterday's totals, per-item breakdowns, and daily reflection archive to a HistoryEntry. Today's session counters reset. Loaded routines, pinned items, and targets carry forward. The rollover is checked once per minute — if the app is not open at midnight, the rollover runs on the next open.
Routines
Routines are named arrangements of sessions, composed deliberately. They are the score; each day is the performance.
Creating a routine
In the Routines tab, press New to create a blank routine or From Today to capture the current session arrangement. Give it a name — an italic serif label that will appear on Today when loaded. Add sessions and pin pieces to each session from the repertoire. Each session carries its own optional intention line and optional minute target.
Intentions
Each session within a routine can carry an intention — a phrase, a focus, a note-to-self. Left hand only, mm. 24–48. Slow. Intentions exist only inside routines. They do not appear on Today's interface — they are written before the day, for the day, not displayed during it.
Loading onto Today
Press Load on any routine to replace Today's session stack with that routine's arrangement. An IKB-underlined italic routine name appears at the top of Today. Per-piece targets set in the routine propagate into Today on load. A Free mode button returns to the default arrangement at any time.
The key distinction
Editing the session stack on Today — adding a piece, removing one, changing a target — never alters the saved routine. The routine is a template. Today is a performance of it. They are separate. One day's deviations do not bleed backward into the plan.
Managing routines
Each routine can be renamed, expanded to reveal its sessions, and deleted. Sessions within a routine can be reordered. Pieces within a session can be reordered by drag. A Loaded on today badge marks the currently active routine.
Métronome
A full-featured metronome built into the footer. Toggle with M. Tap tempo with T.
Tempo
BPM ranges from 40 to 240. Adjust via the slider or by typing directly into the BPM field. Italian tempo presets — Larghetto, Andante, Andantino, Moderato, Allegretto, Allegro, Vivace, Presto — appear as small clickable labels below the slider. Each name covers its traditional range; clicking snaps to the midpoint.
Time signature
- Beats per bar1 through 12. The first beat of each bar receives a distinct click accent.
- Note valueThe beat unit: half, quarter, eighth, or sixteenth.
- SubdivisionQuarter (no subdivision), eighth, triplet, or sixteenth. Subdivisions sound at reduced volume and appear as shorter marks in the footer visualizer.
The footer visualizer
While the metronome runs, the footer renders a minimal beat display: tall marks for beats, shorter marks for subdivisions. A quiet oscilloscope. The active beat illuminates briefly on each tick.
Sound profiles
Three options: Click (sharp, classic), Wood (softer woodblock), Beep (electronic). Volume adjustable independently of the main system volume.
Accelerando
Enable accel to ramp tempo automatically. Set a target BPM, a step size in BPM, and an interval (every N beats or every N bars). The metronome increments tempo by the step at each interval until the target is reached, then holds. Useful for systematic tempo development on difficult passages.
Tap tempo
Press T (or the on-screen Tap button) repeatedly in time. After two taps, the average interval is computed and set as BPM. Continue tapping to refine. The tap tempo is disabled while typing in any text field.
Logging BPM to tempo history
When the metronome is running and an item is active, press L (or the log control in the footer) to stamp the current BPM onto that item's tempo history. This is the only way BPM entries are created — no auto-capture. Two or more entries render as a sparkline in Repertoire. See Tempo History.
Tuning & Drone
A configurable drone for intonation practice, accessible from the footer. Toggle with D.
Reference pitch
Three A= presets: 440 Hz (modern standard), 432 Hz (alternative tuning), 415 Hz (Baroque). All other notes derive from the selected reference. Switch freely while the drone is playing.
Temperament
- EqualThe modern standard. All semitones equally spaced. The only temperament in which all keys are equally usable.
- JustPure ratios relative to the root. Thirds and fifths are acoustically clean in the home key. Other keys deviate significantly.
- Meantone ¼Quarter-comma meantone. Third-comma pure major thirds. Characteristic of Renaissance and early Baroque keyboard music.
Cent offsets
For Just and Meantone temperaments, the panel displays cent offsets from equal for each pitch class relative to the selected root. These are informational — they reflect the theoretical derivation of the temperament, not a tuner reading.
Drone note
Select an octave, a root, and a specific note within the octave. The selected drone plays as a sustained tone. Volume is adjustable. Use the drone for sustained intonation work — a tonic pedal, a dominant, an open-string reference. No pitch detection is performed.
Répertoire
The atemporal view. The library of everything being worked on — pieces, technique studies, play material, and study topics — with their full histories, stages, and metadata.
Adding items
The Add row at the top of Repertoire shows four controls — one per session type. Roman numerals (I–IV) mark the type. Clicking one opens an inline form: title, composer (for pieces), and a status selector. The item appears in the list immediately.
The stage arc
Pieces move through four learning stages. Each stage is a clickable label in the expanded item view. Moving forward advances the stage; clicking the current stage offers a step back.
Queued — acquired, not yet begun. Learning — actively working through the piece. Polishing — the notes are secure; refining interpretation. Maintenance — in the rotation to keep performance-ready. Retired — no longer actively practiced, but kept in the archive.
Metadata fields
- TitleWork title. Leave blank for a movement of a collection — the movement field becomes the display title.
- MovementMovement or part name. e.g. I. Prélude. Used when the work is part of a collection.
- CollectionThe larger work. e.g. Suite Bergamasque, WTC I. Enables grouping by collection in the list.
- CatalogOpus, BWV, K, or other catalog number. e.g. Op. 110, BWV 846.
- ComposerLast name or full name. Used in byline display, sorting, and filtering.
- InstrumentPiano, violin, voice, etc. Appears in the sidebar filter.
- LengthPiece duration in m:ss or decimal minutes. Used in Programs for total duration calculation.
- Tempo targetA target BPM, shown in the expanded view alongside the tempo history sparkline.
- StartedAuto-set on first practice. Manually editable. Shows as a relative date in the list.
- ReferenceA URL to an external recording or score. Opens in a new tab. Not embedded.
- TagsFree-form labels. e.g. technique, lesson, audition. Used for filtering and in Notes cross-references.
Collections and grouping
Items sharing the same Collection value can be grouped using the Group control. The collection name appears as a row header; its movements indent beneath it with a count badge. The total practice time across all movements is shown in the collection header.
Sorting and filtering
Sort by: composer, title, stage, type, last practiced, time invested, or piece length. Filter by type and stage. A full-text search covers titles, composers, and tags. Empty filter results offer a Clear all filters action. The sidebar shows composers and instruments as collapsible filter shortcuts.
Item deletion
Deleting an item that has accumulated practice time or appears in any history entry requires confirmation. The confirmation states clearly what will be lost. Fresh items (no time, no history) delete silently.
Spots
A spot is a named section within a piece — a passage, a chord progression, a technical figure — that warrants its own practice log and tempo target.
Adding spots
In a piece's expanded view in Repertoire, press Add spot. Give it a name — mm. 24–48, LH octave run, Coda. Each spot is independently timed when active in Today. Per-spot time accumulates separately from the main piece total.
Per-spot fields
- NameA short label for the passage. Appears in Today, the footer, and the log drawer.
- NoteA persistent annotation — fingering, a teacher's comment, a harmonic observation. Not tied to any session.
- Tempo targetA BPM goal for this specific passage. Shown in the spot row.
Log to spot
When a spot is active in Today and the metronome is running, press L to log the current BPM directly to that spot's tempo history — rather than to the parent piece. The footer's log control appends → spot name when a spot is active to make the target clear.
Spots in Today and Logs
Active spots appear in the Today session item, indented below their parent piece. In the log drawer, spot practice time is shown beneath the piece, with the spot name in a smaller italic label. Spots carry a persistent note across all sessions.
PDF Scores
A PDF score can be attached to any piece in Repertoire. It opens in a side drawer with a notes column alongside it.
Attaching a score
In a piece's expanded view, press the PDF icon to attach a file. The score is stored in IndexedDB keyed by the item's ID. It persists across page reloads. Scores are device-local — they are not included in cloud sync and will not appear on other devices.
The score drawer
Opening a score expands a right-side panel. The PDF renders with standard page navigation. Alongside the score, a notes column provides space for markings, fingerings, and annotations. Notes in this column are attached to the piece and persist independently of session logs.
Accessing scores
The PDF icon appears in Today's session items and in the Repertoire expanded view. A tooltip indicates when a score is not available on the current device. Scores opened from Today do not interrupt the timer.
Tempo History
A sparse, manually-assembled log of BPM marks for each piece. Two or more marks render as a compact sparkline in Repertoire.
How it works
When the metronome is running and a piece is active, press L to stamp the current BPM as a timestamped entry in that piece's bpmLog. This is the only way entries are created. No auto-capture. Each stamp records the BPM and the date.
The sparkline
In the Repertoire list, pieces with two or more BPM entries show a compact line chart in the expanded view. The earliest entry appears as a number on the left; the most recent entry on the right. No axis, no labels, no tooltip. The shape of the line tells the story — rising steadily, plateaued, recently jumped.
Design intent
The tempo history is intentionally sparse and manually triggered. It records meaningful tempo milestones — the day a difficult passage became secure, the week the final tempo was approached — not every session's starting tempo. Auto-capture was considered and rejected: the log is for landmarks, not surveillance.
Reference Track
Each piece can carry a URL to an external recording — a reference performance, a teacher's recording, a score video.
Attaching a reference
In a piece's expanded view in Repertoire, paste a URL into the Reference field. Any URL is accepted — Spotify, YouTube, a personal cloud link, a library database entry. No validation, no embedding.
Opening the reference
A small music note icon appears alongside the piece in Today and Repertoire when a reference URL is set. Clicking opens the URL in a new browser tab. The reference never plays inside Études — it opens externally, intentionally. Études is not a player.
What it is not
There is no in-app audio embed, no YouTube iframe, no streaming. The reference field is a text link. It opens in a new tab. This is the ceiling, and it is sufficient.
Programs
Programs are concert set lists — an ordered collection of pieces with a performance date and a total duration. They are for planning what to perform, not how to practice.
Creating a program
Press New in the Programs tab. Name the program — the name appears in italic serif and can be edited inline by double-clicking. Set a performance date in YYYY-MM-DD format.
Adding pieces
Only items of type piece can be added to a program. Use the Add piece picker to search and add from the repertoire. Pieces can be reordered by dragging. The total program duration updates automatically from individual piece lengths set in Repertoire — so keeping the Length field accurate matters here.
Programs vs. Routines
Routines describe how to practice. Programs describe what to perform. A routine might include technique exercises and warm-ups; a program would never. Programs have performance dates; routines do not. They answer different questions and live in different tabs.
Daily Recording
One take per day. A stratum of the journal equal to the written reflection. The constraint is the feature.
Recording
Press the microphone icon in the footer to begin recording. The footer indicator turns red; the label reads Recording in progress… Press Stop to end. The take is processed immediately and rendered as a waveform on Today.
The waveform
Recordings are rendered as 60-bucket amplitude waveforms — a visual trace of the take, playable inline. The waveform appears on Today and in the log drawer for past days. It is not a spectrum analyser or a pitch display. It is a shape.
Replacing and deleting
Recording a second take on the same day replaces the first — a confirmation prompt appears before overwriting. Past-day recordings can be deleted from the log drawer with a confirmation. Deletion is permanent; recordings are stored locally in IndexedDB and cannot be recovered once removed.
Attaching to a piece
From the footer recording panel, a Attach to piece in routine dropdown lets a daily recording be associated with a specific piece from today's session. This links the recording to the piece in its Rolling Archive. See Rolling Archive.
Storage note
Recordings are stored as audio blobs in IndexedDB, keyed by date. They are not included in cloud sync — they remain on the device that recorded them. IndexedDB storage is subject to browser quota; a warning appears if the device approaches its limit.
Rolling Archive
Each piece maintains its own recording rack — a slot-based archive of up to ten unlocked takes, with an independent set of locked recordings preserved indefinitely.
The ten-slot rack
Each piece holds a maximum of ten unlocked recordings. When an eleventh is added, the oldest unlocked recording is deleted automatically — first in, first out. This is the rolling window. It keeps the archive from growing without bound while preserving a recent history of the piece's development.
Locking a recording
Any recording can be locked using the lock icon in the recording row. A locked recording is exempt from FIFO deletion. Locked rows carry a warm gold left border and a tinted background. Up to twenty recordings per piece can be locked simultaneously. A rack full warning appears when all ten unlocked slots are occupied — add another take and the oldest unlocked one will be removed.
- UnlockedSubject to FIFO. Maximum 10 per piece. Automatically removed when capacity is exceeded.
- LockedExempt from FIFO. Maximum 20 per piece. Deletable only by explicitly unlocking and then deleting.
The rack header
At the top of the recording panel, a count reads N / 10 for unlocked slots and a lock icon with a count for locked recordings. The proportion of filled slots gives a quick sense of how much of the recent archive is used.
Recording from Today vs. Repertoire
Piece recordings can be attached from two places: the footer's Attach to piece control during or after a daily recording, or the recording icon directly on a piece in Repertoire. Either path adds the take to the piece's Rolling Archive. The take must originate from a microphone capture — there is no way to import audio files.
A/B Comparison
Select any two recordings to compare them side by side — either within the same piece or across two different pieces.
Within the same piece
In a piece's recording panel, each row carries an A and B button. Assign one recording to A and another to B. When both slots are filled with recordings from the same piece, a two-column comparison view opens inline within the panel — two waveforms, two playback controls, side by side. The single-recording preview is suppressed while the A/B view is active.
Across two pieces
Assigning A to a recording in one piece and B to a recording in a different piece produces a cross-piece comparison. A sticky bar appears at the bottom of the Repertoire view, spanning the full width, with both waveforms and the respective piece names shown. This bar persists while navigating between pieces in Repertoire, making it possible to compare a current piece against a historical reference recording of another work.
Clearing the comparison
A clear control in the comparison bar (or at the top of the panel for same-piece comparisons) dismisses the comparison and returns to single-recording playback.
Notes
A commonplace book, independent of any session. Pedagogy, philosophy, quotes from teachers, half-formed ideas. Things that do not belong to any single day.
Creating notes
Press New in the notes list to create a blank note. Notes have a title (edited inline at the top of the editor) and a free-form body written in Markdown. Each note is timestamped on creation.
Markdown
The editor supports standard Markdown: bold, italic, headings, lists, and horizontal rules. An Edit / Preview toggle switches between the raw text and the rendered view. In Preview mode, all formatting is applied. Markdown formatting characters do not appear in Preview.
Wiki links
Type [[Note Title]] to create a link to another note by name. In Preview mode, wiki links render as clickable internal links that navigate directly to the referenced note. In Edit mode, hold Ctrl or Cmd and click to follow the link without leaving the editor.
Tags
Type #tag anywhere in a note's body to attach a tag. Tags appear in the sidebar as filter shortcuts. Searching for #tag in the search field narrows the list to tagged notes. Tags are case-insensitive and contain no spaces — multi-word tags use hyphens by convention.
Folders
Notes can be organized into folders created from the sidebar. A note belongs to one folder at a time; the folder name appears above the note title in the editor. The No folder label indicates an uncategorized note.
Built-in categories
Two categories are automatically populated: Daily Reflections (the journal entries from Today, viewable but not editable here) and Repertoire Logs (per-piece notes attached during sessions). These are read-only in the Notes view — they exist for reference and cross-linking.
External links
In Edit mode, hold Ctrl or Cmd and click any Markdown link to open it externally. In Preview mode, external links open in a new tab directly. Internal wiki links always navigate within the app.
Search
The search field covers note titles, body text, and dates. Matches highlight inline. The Clear control returns to the full list. The sidebar collapses by default to give the editor maximum space.
Logs
The archive. A scrollable gallery of past sessions — one card per entry — organized by date and searchable by content. Like flipping pages.
Card types
Three card types occupy the same horizontal gallery. Daily cards show a single session. Weekly cards summarize seven days. Monthly cards summarize a full calendar month. All three are the same size; a two-pixel top accent differentiates them at a glance.
- DailyDark grey accent. Shows date, practice time, a reflection preview, and a recording indicator.
- WeeklyLight grey accent. Shows week range, total minutes, and a dot row for each day practiced.
- MonthlyIKB blue accent. Shows month and year, total minutes, and a mini calendar grid with dots for practiced days.
Dot indicators
On weekly cards, each day practiced is represented by a dot. Days where the daily target was met are shown in a darker shade of IKB; days practiced below target in a lighter shade. Days with no practice show no dot. On monthly cards, the same logic applies within the mini calendar grid — a small snapshot of the month's pattern.
Searching and filtering
The search field covers reflection text, piece titles, composer names, spots, and per-piece notes. Type to narrow in real time. The filter row lets the list show only daily, weekly, or monthly entries. A count below the filter shows matching entries. Clear returns to the full archive.
Opening a day
Clicking any card opens the Log Drawer — the canonical day-review surface. See The Log Drawer.
The Log Drawer
The single surface for reviewing a past day. Opened from Week, Month, or Logs — wherever a day is clicked, the same drawer appears.
Contents
- Date & totalThe full date, the day's total practice minutes, and the warm-up total if present.
- WaveformThe daily recording waveform if a take was made that day, with inline playback and a delete control.
- Items by sectionPractice items grouped by session type (Technique, Pieces, Play, Study), each with its per-item minutes. Spots are shown indented beneath their parent piece.
- ReflectionThe daily journal entry, rendered as written. Not editable from the drawer — edits to past reflections are made by reopening the day.
For weekly and monthly entries
Opening a weekly or monthly card from Logs shows the two reflection fields (Notes, observations, wins and Goals for next period) for that period. No per-item breakdown — those live in the individual daily drawers.
Past-day recordings
Audio from past days plays inline from the drawer. A delete control removes the recording permanently with a confirmation. The waveform disappears from the drawer on deletion. The session log is unaffected.
Week View
Retrospective and prospective in equal measure. What happened this week, and what comes next?
The bar chart
Seven day bars show relative practice minutes for each day of the current week. Bars scale to the tallest day. Days with no practice show no bar. Hovering over any day highlights the full week context. Clicking a day opens the Log Drawer for that day.
The activity ring
An IKB SVG ring shows cumulative weekly minutes against the weekly target set in Settings. The ring fills clockwise. When the weekly target is reached, the ring completes silently. No animation spike, no congratulation text.
Navigating past weeks
Arrow controls flank the week date range label. Navigate backward to review previous weeks. Past weeks show their date range — 20 – 26 Apr — not the month name. Hovering a past week in the calendar highlights all seven day cells for that week. Click any highlighted day to open its log drawer.
Weekly reflection
Two fields below the chart: Notes, observations, wins and Goals for next week. Written at the end of or start of a week. Saved automatically. Past weeks' reflections are read-only.
Month View
The view that makes patterns visible. A full calendar, a ring, and two fields of reflection.
The calendar
A standard month grid. Each practiced day carries an IKB intensity rail — a small vertical bar whose opacity reflects the proportion of the daily target met. Days with heavy practice glow deeper blue. Days with light practice show a faint trace. Rest days show no rail. Hovering any day highlights its cell and reveals a minute total.
The activity ring
The monthly ring fills against the monthly target in Settings. It reads the same as the weekly ring — IKB, 180px, clockwise fill — but represents the full month's accumulated time. The quarter label (Q1, Q2, Q3, Q4) appears as a small eyebrow to orient the month in the year.
Navigating past months
Arrow controls adjacent to the month name navigate backward through previous months. Past months are read-only except for the reflection fields. Click any practiced day to open the Log Drawer.
Monthly reflection
Two fields: Notes, observations, wins and Goals for next month. Written at the month's end or beginning. Past months' reflections are readable and editable retroactively — a month's meaning can clarify in retrospect.
Account
An account is optional. Études works fully offline and without authentication. An account enables cloud backup and cross-device access to journal data.
Signing in and up
Open Settings and scroll to the Account section. Enter an email address and password to sign in or create an account. Authentication is handled by Supabase. There are no OAuth providers, no social login, no public profile. The account exists only to hold a private backup of the journal state.
What changes with an account
Once signed in, the journal syncs to the cloud automatically when local data changes. A Sync now button in Settings triggers an immediate sync. The last sync timestamp appears below the button. Nothing else changes — the interface is identical, the data model is identical, the experience is identical.
Signing out
Signing out stops all cloud sync. Local data remains on the device unchanged. The cloud backup is retained and will be available on the next sign-in, from the same or a different device.
Audio recordings and PDF scores are never synced to the cloud. They are stored in IndexedDB, which is strictly local. Moving to a new device requires re-recording or re-attaching scores manually.
Cloud Sync
When signed in, the full journal state serialises to a single row in Supabase, keyed by user ID. Sync is automatic, incremental, and silent.
What syncs
- ItemsAll repertoire items — pieces, technique, play material, study — with full metadata, stages, tags, and tempo history.
- HistoryAll daily, weekly, and monthly HistoryEntries — practice minutes, per-item breakdowns, and reflections.
- RoutinesAll named arrangements with their sessions, intentions, piece assignments, and targets.
- ProgramsAll concert programs with their piece lists and performance dates.
- NotesAll free-form notes, including titles, bodies, folders, and tags.
- SettingsDaily, weekly, and monthly targets.
- Item timesLifetime accumulated practice time per item.
- Recording metadataWaveform peak data and timestamps for daily and piece recordings. Audio blobs are not synced.
What does not sync
Audio recordings (IndexedDB blobs), PDF scores (IndexedDB blobs), and the active session state on Today (which resets daily by design). These remain on the recording device only.
Dirty tracking
A localDirtyAt timestamp in localStorage records the moment of any local mutation. A lastCloudSyncAt timestamp records the last confirmed successful cloud write. On sign-in, if localDirtyAt is more recent than lastCloudSyncAt, the app treats local data as dirty and initiates a sync — either automatically or by presenting the conflict resolution modal if cloud data is also present.
Sync status
The Settings panel shows one of three states: idle (a cloud icon), Syncing… (a spinning loader), or Sync error (a cloud-off icon in muted red). A sync error means the last attempt failed — usually a network issue. Press Sync now to retry.
Conflict Resolution
When two devices each have data — one worked offline, the other synced separately — the journal must choose how to reconcile them. A modal presents three options.
When a conflict occurs
A conflict is detected when signing in with local data present and cloud data also present, and neither is a clean superset of the other. The Sync conflict modal appears with a summary: "This device has N pieces. The cloud has M pieces from another device."
The three options
- MergeCombine both sources. Items, routines, programs, and history entries are unioned by ID. When the same item ID exists on both sides, the local version wins. Notes and settings follow the same rule. This is the safest option when both devices have unique data.
- Use this deviceThe local data is authoritative. The cloud is overwritten with the local state. Data present only on the cloud is lost.
- Use cloudThe cloud data is authoritative. Local changes since the last sync are discarded. The local state is replaced with the cloud state.
The merge strategy in detail
Arrays (items, routines, programs, history) are merged by ID — a Map keyed by item ID or date key receives all remote entries, then all local entries override. Local wins on any same-key collision. Object maps (itemTimes, pieceRecordingMeta) are merged key-by-key, local winning per key. The workingOn set is unioned. Scalar fields (settings, targets) take the remote value as a base, with local settings merged on top.
After any resolution, the merged or selected state is written back to the cloud immediately. The dirty flag clears and sync resumes normally.
Export
The musician owns their practice in readable form at all times. Études exports the full journal as a single Markdown file.
The drag chip
A small .md chip in the header can be dragged to the desktop. On Chromium-based browsers, this produces a Markdown file immediately via the DownloadURL data-transfer format. On Firefox and Safari, the export falls back to a text blob. The Settings panel offers explicit Export .md and Export .txt buttons as reliable alternatives.
What the export contains
The complete repertoire with all metadata. Every daily, weekly, and monthly history entry with reflections. All notes. Routine and program definitions. The export is plain text, readable without Études, importable into any Markdown tool. It is not a backup in the technical sense — it does not include audio or PDF binaries.
JSON export
A Export JSON option in Settings produces a machine-readable snapshot of the full application state. This can be re-imported using Import in the same panel. JSON export preserves the full data model including recording metadata keys, though audio blobs must be re-attached separately.
A future version will export the journal as a zip of individual Markdown files with YAML frontmatter — one file per session, one per note. This form honors the paper metaphor more faithfully and is the intended export format.
Keyboard Shortcuts
Silent by default. Press ? anywhere to open the help panel. All shortcuts are disabled while typing in any text field.
Playback & Timer
| Key | Action |
|---|---|
| Space | Play or pause the most recently active item |
| R | Toggle rest — starts or stops the rest counter |
| 1 | Jump to Technique session (I) |
| 2 | Jump to Pieces session (II) |
| 3 | Jump to Play session (III) |
| 4 | Jump to Study session (IV) |
Footer Tools
| Key | Action |
|---|---|
| M | Toggle the metronome on or off |
| T | Tap tempo — press repeatedly in time to set BPM |
| L | Log current BPM to the active item's tempo history (or to active spot) |
| D | Toggle the tuning & drone panel |
| N | Open the quick-note field |
Navigation & UI
| Key | Action |
|---|---|
| Esc | Close any open drawer, modal, or panel |
| ? | Open the keyboard shortcut help panel |
Data & Privacy
All journal data lives on the device. No telemetry, no analytics, no third-party data sharing. What is practiced here is private.
localStorage
Application state is stored as JSON in localStorage under the following keys:
IndexedDB
Audio blobs (daily recordings and piece recordings) and PDF files are stored in IndexedDB. Audio is keyed by date string (daily recordings) or by a composite of item ID and timestamp (piece recordings). PDFs are keyed by item ID. IndexedDB storage is subject to browser quota — typically several hundred MB to several GB depending on the device and browser. A storage warning appears in Settings if the estimate approaches the limit.
Cloud storage
When signed in, journal state is upserted to a Supabase user_state table, keyed by user ID, protected by Row Level Security. The Supabase project is private. No data is accessible to any other user or shared externally. Audio and PDF data are never transmitted.
Data portability
The full journal is exportable at any time as Markdown or JSON from the Settings panel. The export contains everything in localStorage. It can be imported back into Études or read independently. Études makes no claim to the data within it — the journal belongs to the person who keeps it.
Schema migrations
When the application schema version increments, a migration runs automatically on load. Migrations are additive where possible — they add new fields with safe defaults rather than removing existing data. The current schema version is stored in Settings and visible in the bottom of the Settings panel.
To clear all data: open the browser's DevTools, navigate to Application → Storage, and clear localStorage and IndexedDB for this origin. This is irreversible and removes everything, including audio recordings not backed up to the cloud.