Releases: Colbysdovi/Lockpad-Public
Release list
v1.2.0 · Bohicon
Mostly a release about the app behaving the same way wherever you meet it. Every menu,
picker and popover now shows a single highlight that travels to the row you are about to
choose, instead of one row's background blinking out while another's blinks in somewhere
else. Alongside that: a way to see twice as many notes at once on a phone, and a
home-screen app on iOS that finally sits flush against the bottom of the screen.
A new minor line, so a new name: Bohicon, the road and rail junction beside Abomey, where
the routes from the north, the coast and the interior meet. A fitting one for the release
that got every menu in the app to agree on how it behaves.
🆕 Added
- Two notes per row, on a phone or tablet. A control in the header of every list — the
main list, a folder, a tag, the archive and the trash — switches between one note per row
and two. The list rearranges itself where it stands, without navigating anywhere and
without losing your place in the scroll. The choice is remembered on that device and
nowhere else: it is a preference about the screen in your hand, so it is deliberately not
synced and never leaves the browser it was made in. Desktop does not get the control,
because it already fills the width with as many columns as fit. - A compact note card, drawn for the narrow width rather than the normal card squeezed
into half the space. It keeps the title, a shortened preview, and the pin, lock and colour
you recognise a note by, and it carries Archive and Delete on the card itself. Everything
else the full card offers — duplicate, organise, both exports, lock — is one tap away
behind "More actions", which opens the usual bottom sheet on a phone and a menu on a
tablet. The archive and trash lists keep their own actions unchanged. Every control on the
compact card is at least 40 by 40 points under a finger. - Three menus that needed a mouse now take the arrow keys: the menu on a table cell, the
table actions and export popovers, and the menu on a block's drag handle. Each opens onto
its first row, moves with Up and Down, wraps at both ends, and closes on Escape.
📈 Improved
- One highlight, and it travels. Every vertical list you pick a single row out of now
behaves the same way: one highlight slides to the row you are on and resizes itself to fit
it, so your eye follows one thing moving rather than hunting for a background that has
appeared somewhere new. It reaches the action menus, the folder, tag, note-link, bulk and
search-scope pickers, the search results, the/menu, the table cell menu, the table
actions and export popovers, and the block handle menu. Keyboard and pointer never
disagree about which row is selected, and the highlight resizes correctly for a label that
wraps onto a second line — which French labels regularly do. - The
/menu offers blocks, and only blocks. Strikethrough has gone back to the
toolbar with the rest of the text styling, so the menu you open to insert something no
longer mixes in something that restyles what you already wrote. - The
/menu keeps the command you picked while you carry on typing. Narrowing the
list no longer throws your choice back to the first row; it moves only when the command
you had picked stops being offered. Hovering a row selects it, and it is the same
selection the arrow keys move. - The list settles into its new density instead of jumping. Switching between one and
two notes per row used to change the layout between one frame and the next. The rows now
rise and fade in, top first, while the arrangement itself still changes on the tap. - New note sits at the right edge of the top bar on a phone, where the thumb already is,
instead of in the middle of the row splitting the page's own controls in two. Desktop is
unchanged; it was already last there.
🩹 Fixed
- The home-screen app on iOS reaches the bottom of the screen. Added to the home screen
and opened from there, Lockpad left a band of bare paper below the floating composer — on
an iPhone 17 Pro, 112 points of it where the design asks for 50 — and the note sheet and
the bottom-sheet menus stopped at the same line. Lockpad had been asking iOS for a
translucent status bar, which makes the page report the status bar as a safe area and
subtract it from the viewport while still anchoring the page to the top of the screen, so
no measurement available to a web app could reach the last 62 points. It now asks for the
ordinary status bar, iOS lays the app out below it, and the bottom of the app is the
bottom of the screen. The strip behind the clock is painted from the page background, so
it follows light and dark on its own. The composer also no longer floats a status bar too
high above the on-screen keyboard, and dragging past the end of a list no longer pulls the
page itself and opens a gap underneath.
You have to delete the Lockpad icon from your home screen and add it again. iOS
records that setting inside the icon at the moment you create it, so an icon made before
this release keeps the old behaviour however many times the app updates underneath it. - The drag handle works on an indented block. A checklist item nested under another one,
or any block at depth, handed you its parent's handle the moment your pointer crossed the
indent on the way to the grip — so the handle jumped, and catching it moved the parent and
everything underneath. Which block the handle belongs to is now decided by how far down the
pointer is rather than how far across, so it is the block you are pointing at, at any
depth. - The handle waits to be reached. It stays for 600 milliseconds after the pointer leaves
the block instead of 350, the area that keeps it alive is measured from the handle itself
rather than guessed, and scrolling now moves it along with its block instead of hiding it.
With its menu open it stays aimed at the block you opened it on, so a stray movement can
no longer leave "Move up" pointing somewhere else. - The handle lines up with the block it moves. It used to sit in one shared column at
the left edge of the note, so on an indented row it floated off to the left of a checkbox
it had no visible relationship to. It now follows the block's own leading edge, four
points clear of a bullet or a number rather than sitting on top of it, and centres on the
block's first line of text — measured from the text itself, which is what fixes the few
points it was out on list items, blockquotes and headings. - The
/menu is never cut off by the bottom of the window. Starting a command near the
foot of a long note used to open the menu downwards regardless, running it off the screen
with the last commands unreachable and nothing to scroll. It now opens upwards when it
does not fit below and there is more room above, and stays within the window on both axes
even when neither side has room. It still prefers to open downwards, so a menu that fits
appears where you expect it.
v1.1.3 · Abomey
A patch release for one bug: a checklist added while writing a note lost its styling.
🩹 Fixed
- A checklist you add while writing looks like a checklist again. Since v1.1.0, a
checklist added to a note — from the toolbar, the/menu, or by pasting — came out
unstyled until the note was reopened: each item showed a bullet and a tiny checkbox,
and the text you typed landed on the line below the box instead of beside it. A new
checklist now looks right straight away, with the larger box, the bigger box and tap
target on a phone, and its text next to it. The notes themselves were never affected,
so existing checklists need no repair.
v1.1.2 · Abomey
Everyday work with a batch of notes gets less repetitive, and the folder colour picker
gets more room in it. Nothing here changes how Lockpad stores or protects anything.
A patch release, so it keeps the Abomey name: small improvements to how the app feels
day to day, and one fix that matters to anyone running nightly backups.
🆕 Added
- Shift+click selects every note in between. Tick a note, hold Shift and click
another, and everything between the two is selected, in the order the list shows them —
across the line between pinned notes and the rest, too. Shift+click again and the far
end of the range moves, in either direction; notes you ticked by hand stay ticked the
whole time. With nothing selected yet, Shift+click simply selects the note you clicked. - Escape deselects every note. Anything open on top of the list goes first, one thing
per press: a folder picker, a dialog, an open note. So pressing Escape to leave a note
never throws away the selection waiting behind it. - Fifteen more folder colours, behind "More colors" in the folder colour picker: a
deeper shade of each of the ten pastels, plus raspberry, fuchsia, orchid, cyan and lime.
Editing a folder whose colour lives in that second row opens straight onto it, so its
colour never looks as if it has been cleared.
📈 Improved
- A selection survives a move or a tag. Filing notes into a folder no longer unticks
them, so a batch can be moved and then tagged without selecting it all again. Deselect
is the one control that ends a selection now. Archiving or deleting still clears it,
because those notes leave the list. - The selection bar says what it counts, and what its last button does. It reads
"2 notes selected" instead of "2 selected", and "Clear" is now "Deselect". In French it
is "Désélectionner" rather than "Effacer", which read as erasing the notes themselves. - The selection bar stays on one line in French. It is a little wider, so the longer
French labels no longer push the buttons onto a second row — and when a narrow window
does make it wrap, the buttons no longer sit beside an empty gap on their left. - The folder colour picker shows its two choices. The ready-made colours and a custom
hex value are now two labelled groups instead of one block with a sentence explaining
them, and the tick marks only the one in use. Each colour tells a screen reader whether
it is selected, and the hex field has a real label instead of a placeholder. - A copy built from source says which release it came from. Settings → About shows
the version it was built from, such asv1.1.2+src, instead of "Development build".
🩹 Fixed
- A failed backup no longer leaves an empty archive behind. When
scripts/backup.sh
could not reach the database it still wrote a tiny file that looked like a backup, and
that file took one of the fourteen kept slots — so enough failures in a row would push
every real backup out. It now keeps an archive only when there is data in it, and leaves
nothing when there is not.
v1.1.0 · Abomey
Two things you could not do before. A note can hold a table — a few options against a
few columns — with everything needed to shape one a click away from the cell you are
already in. And search knows about your folders and tags, so a note you remember only
as "the one in Budget" is findable by that, and you can narrow a search to one folder
without leaving the search box.
A new minor line, so a new name: Abomey, the royal capital of Dahomey, whose palace walls
recorded the kingdom in bas-relief. A release about writing things down in a shape you can
find again later.
🆕 Added
- Tables, one slash away. Type
/, pick Table, and a three-by-three grid with a
header row lands as its own block with the cursor already in the first cell. There is
no size picker on purpose — deciding on dimensions before you have any data is exactly
the stop-and-think that menu exists to avoid. Add rows and columns as the thing takes
shape. It is deliberately not a spreadsheet: no formulas, no sorting, no merged cells. - Rows and columns can be added, moved and removed. Insert above, below, left or
right; move a row up or down and a column left or right; delete a row, a column, or the
whole table. An action with nowhere to go — moving the top row up — is greyed out rather
than quietly doing nothing when you press it. - Deleting the last row deletes the table. Ask for the only remaining row to go and
the table goes with it, instead of the app going silent and leaving you in a one-row
table with no way out.⌘Zbrings it all back. - The table actions come to you. On a desktop a small handle appears in whichever cell
holds the cursor and opens the same menu, so reshaping a table does not mean looking
away to the toolbar for something you are doing right here. On a phone the toolbar's
table button scrolls itself into view the moment you tap into a table, rather than
waiting off the edge of a row you had no reason to scroll. - A wide table scrolls inside itself, and its header row stays put while the rows
slide underneath, so a long table never leaves you guessing which column you are
reading. The note itself never scrolls sideways — nothing else in the app does. - Columns can be resized by dragging their edge, wherever there is a mouse to do it
with. The edge thickens and turns terracotta under the pointer, and the cursor changes,
so the line tells you it can be dragged before you try. A table only grows wider than
the note when its columns genuinely cannot fit; when they can, it goes back to filling
the width by itself. - Tables read correctly to a screen reader, because header cells are marked as the
headers of their columns rather than merely looking like them — so a value is announced
with the column it belongs to. Every action in the menu is reachable from the keyboard
through the toolbar. - A table stays a table on the note card, shown as a miniature grid rather than as a
run-together line of words, and the words inside its cells are findable by search like
any other text in the note. - Search knows about your folders and tags. Typing a folder's name finds the notes
filed in it, and typing a tag's name finds the notes carrying it — even when that word
appears nowhere in the notes themselves. So a note you remember only as "the one in
Budget" is now findable by that, and a result that turned up for that reason says so on
its own row, rather than looking like a mistake. Accents are ignored on both sides:
typing "cafe" finds a folder called "Café", which matters now the app speaks French. - Search can be narrowed to one folder or one tag. A selector in the search bar reads
"All notes" until you point it somewhere; results then come only from there, and the
words you have already typed keep applying inside it. Choosing "All notes" again puts
you back, without losing what you typed. Each folder and tag in that list shows how many
notes it would give you for what you have typed, lined up in a column so you can read
down them at a glance — so picking where to look is a decision rather than a guess, and a
folder with nothing in it simply shows no number.
🩹 Fixed
- The welcome no longer flashes the app at you before the guide arrives. On a brand
new library the opening animation used to fade out onto a working interface for about
half a second before the welcome guide landed on top of it — long enough to start
reaching for something, and then have a dialog take the screen. The three beats are now
separate: the opening animation, then the guide by itself on the app's own paper, and
only once you have finished or skipped it does Lockpad itself fade up — on your full
note list, whichever page the browser happened to be pointed at. Replaying the guide
later from Settings is untouched: it still opens over your library, and leaves you on
the page you called it from. - A note reference opens where you are already reading. Clicking a linked note from
inside the text of a note used to throw it open in a new browser tab, while the panel
you were reading moved on to it as well: the same note in two places, and a stray tab
to close afterwards. It now does what the links in the note's header have always done.
The note you clicked slides into the panel you are in, and the note you came from is
waiting for you under Backlinks to slide you back. - A pasted link opens one tab, not two. The cards that stand in for a Figma file, a
GitHub repository or a YouTube video were being opened twice by one click, landing you
with a duplicate tab every time.
🚧 Known limits
- No merged or split cells. Every row has the same number of cells. A table pasted
from elsewhere that contains merged cells will render, but the actions in the menu are
not written for it. - Resizing a column needs a mouse. The drag is a mouse gesture and there is no touch
equivalent, so on a phone a table is read by scrolling it rather than by reshaping it.
Nothing is hidden that a finger could otherwise have used. - The header row stays first. It cannot be moved down and no row can be moved above
it, because a heading in the middle of the data describes nothing. - A word in a note's title ranks no higher than the same word buried in its body.
Search treats a note as one piece of text, so the note actually called "Budget" can
sit below one that merely mentions budgets in passing. Folder and tag matches are
nudged up the list; titles are not, yet. - Folder and tag names need two characters before they are matched. A single letter
would pull in most of your folders and drown the notes you were actually searching for.
v1.0.0 · Ganvié
The first release. Lockpad is a notes app that runs entirely on hardware you own: no
account, no vendor server, no telemetry, and no outbound network requests in normal
operation.
Since this is the first version there is nothing to compare it to, so what follows is
what the app does.
📝 Writing
- A real rich-text editor. Headings, bold, italic, strikethrough, highlight, bullet
and numbered lists, checklists, quotes and code blocks. - Checklists keep finished work in its place. Tick something and it folds away into
a summary directly beneath its own checklist, rather than dropping to a pile at the
foot of the note, away from the list it belongs to. Open the fold to see what you have
done; untick anything and it goes back to its own position, not the end. The boxes are
sized for a fingertip on a phone. - Pictures in your notes. Paste or insert an image and it lives in the note. Large
photographs are downscaled in your browser before they are ever sent, so a phone
snapshot does not become a 12MB note. - Notes can point at each other. Link one note to another and it shows up as a chip
right in your sentence — its own icon and colour, the linked note's title, clickable —
not a stray character with the connection hidden elsewhere. The note you linked to
shows the connection back, so you can find your way in either direction. - Paste a link to a site Lockpad recognises — YouTube, Figma, LinkedIn, Google Maps
and others — and it renders as a small styled card with that provider's icon and
label, instead of a bare URL. It's computed entirely from the link text itself; nothing
is fetched from the site, so this costs nothing against the zero-outbound-request
promise. - Reorder a note by dragging its pieces. Paragraphs, headings, list items, checklist
items, quotes and code blocks all pick up a drag handle on hover (a long-press on
mobile), so rearranging a note no longer means cutting and pasting text by hand. It
undoes like any other edit. - Strikethrough, inline code, and a horizontal rule now have a toolbar button or
slash-command entry — no more typing the exact markdown shortcut from memory to
reach them. - A quick-note bar that lets you keep going. Type at the bottom of any list and
press Enter: the note is created and you stay where you are, ready for the next
thought.⌘Entercreates it and opens it.Shift+Enteradds a line without saving. - Keyboard shortcuts for search (
⌘K), a new note (⌘N) and the sidebar (⌘\),
with a dialog in the header that lists them rather than expecting you to memorise them.
📂 Organising
- Folders, each with its own colour. A note lives in one folder.
- Tags, independent of folders, so a note can be filed in one place and still turn up
under every subject it touches. - Search across everything, powered by Postgres full-text search rather than a naive
substring match, so it finds words in the middle of long notes. - Pinning is per page. A note can be pinned in All Notes, inside a folder, and under a
tag independently — pinning something to the top of one list does not clutter the
others. - Select several notes at once and archive, delete, move or tag them in one action.
- Duplicate a note when you want to reuse its shape. The copy appears directly
beside the original rather than jumping to the top of the list, and it keeps the pins
the original had, so it is where you would look for it. - Rename tags and folders, with a warning if the name is already taken. Names that
differ only in capitalisation or spacing count as taken — two tags you cannot tell
apart in a list are not two tags. - Tidy up. Settings can delete folders and tags nothing is using any more, so the
sidebar does not silently accumulate. - A note's folder now has its own icon in the note list, so the folder chip reads as
structurally different from a tag chip at a glance, not just by position.
🔍 Not losing things
- Archive and trash are separate. Archiving files something away; deleting puts it in
the trash, where it stays until you empty it. - Undo, for a real length of time. Deleting or archiving leaves a notification with an
Undo button that lasts three minutes, and the countdown pauses while your pointer is
over it. It is not a toast that vanishes before you have read it. - Full-library export. One versioned JSON file containing every note — active,
archived and trashed — plus folders, tags, links and every image embedded in the file
itself. It is a backup that still restores on a different machine, not a set of links
back to the server it was taken from. - Per-note export as Markdown or PDF.
- Import from elsewhere. CSV, Markdown, plain text, HTML, a Lockpad JSON export, and
Google Keep's JSON — with a preview of what will be created before anything is written.
Keep exports are the best-tested path; the other formats work but have had less mileage,
so bring a small batch through first. - Undo survives leaving a note. Type in one note, switch to another, come back — your
undo (and redo) history for the first note is still exactly where you left it, for as
long as the tab stays open.
🌐 Language
- The interface speaks English and French — menus, settings, dialogs, notifications,
the first-run walkthrough and the sign-in screen. - Guessed once, then never argued about. On a fresh install your browser's preferred
language is read and adopted. After that your own choice wins: pick English on a French
machine and it stays English on every visit, whatever the browser keeps saying. - Changed in Settings, and stored with the account rather than with the browser, so it
follows you to any device you sign in from. Both languages are always on screen at once,
each written in its own language — a dropdown would hide the way out from the one person
most likely to need it, someone looking at an interface they cannot read. - Notes are searched in the language they are written in. Each note records its own
language, and full-text search stems accordingly, so searching a French note matches the
other forms of a French word. Notes too short to tell from are treated as English, where
stemming has almost nothing to do anyway. - Switching takes a moment on purpose. The app blurs for a little over a second and
comes back already translated, instead of flickering through the change word by word.
🎨 Look and feel
- A warmer colour palette. Cream and terracotta in light mode, espresso surfaces in
dark mode, including the status colours — warnings and success states feel like part of
the same palette rather than bolted on. - The note panel's header sits visually apart from the page below it — a frosted,
translucent band that fades into the solid writing surface, with the title pinned in
place as long notes scroll underneath it. - Settings is easier to scan. The two irreversible cleanup actions live in their own
clearly separated section at the bottom of the page, informational cards read
differently from clickable ones, and every section explains itself in one line before
the individual cards.
🔒 Privacy, concretely
- Nothing leaves your hardware. No analytics, no telemetry, no error reporting, no
CDN-hosted fonts or scripts, no external APIs. - Per-note encryption, with the key never reaching the server. Lock a note and its
contents are encrypted in your browser with AES-GCM-256, using a key derived from your
passphrase by PBKDF2-SHA-256 at 600,000 iterations. The server stores the ciphertext and
the parameters; it never sees the passphrase or the plaintext. A locked note is also
excluded from the export file, and the file says which notes it skipped. - The database is not reachable from outside. Postgres has no published port; only the
backend can talk to it. - Remote access without exposing anything to the internet. Tailscale
servemakes the
app reachable from your own devices over your tailnet. It is neverfunnel, which is
the mode that would publish it publicly. - One password for the app, because it is built for one person. There is no account
system to leak. - Sign other devices out from Settings, without changing your password.
🐳 Running it
- One command to install it, or build it from source if you would rather read the
code on the way past. The installer asks whether you want to reach Lockpad from your
phone and sets up Tailscale for you if you say yes — and if that part fails, it says so
and leaves the app you just installed running. - Your install stays on the version you installed. It is pinned to a release, so the
app does not change underneath you on a day you did not choose. Updating is deliberate:
edit one line in.envand pull. - Updates apply their own database migrations. Pull the new images and restart; there
is no manual migration step to remember or get wrong. - Backup and restore scripts that round-trip your Postgres data.
- HTTPS on your own network without a Tailscale client, using your own certificate.
This matters beyond the padlock: browsers only expose the cryptography that per-note
locking needs over a secure connection, so plainhttp://would quietly disable the
feature. - It installs like an app on a phone, via a web manifest, so it can sit on your home
screen and open without browser furniture. - A first run that explains itself — a short welcome, and a handful of starter notes
you can delete once you have the idea. - Settings tells you which version you are running, and links to the release notes so
you can see what a newer one contains before deciding to update.
🚧 Known limits
- Single user by design. There is no multi-user mode, and adding one would be a change in
what the product is rather than a set...