Skip to content

v1.0.1 — Multi-groups, sections, file attachments & mobile polish

Choose a tag to compare

@Tomasneto404 Tomasneto404 released this 22 May 23:46

LinkPage v1.0.1 — Multi-groups, sections, file attachments & mobile polish

A big update focused on organization, access control, and mobile UX.

Highlights

  • Multiple groups per link — assign a link to as many groups as needed via a checkbox multi-select in the link modal.
  • Sections within groups — add, rename, reorder, and delete named section headings inside any group; cards render grouped by section in the public grid.
  • File attachments — link cards can now point to an uploaded file (PDF, Office docs, archives, images, text) instead of a URL. 25 MB cap, safe-extension whitelist, and a URL/File toggle in the modal.
  • Password-protected groups — gate sensitive groups with a password. Unlock state uses HMAC-signed cookies with a 30 s auto-relock; links also published in a public group stay visible.
  • Hide links from the public page — keep a link in the admin without exposing it. Eye-toggle on every card, enforced by both /api/links and /r/:id.
  • Custom group colors — pick any color via a "+" swatch that opens the native color picker.
  • Pinned default group — choose which group the public page opens on (Settings → Public Access → Default Group).
  • Custom browser-tab favicon — upload your own .ico / .png favicon from Settings → Branding.
  • Long-press to bulk-select — press-and-hold (450 ms) any card on touch or mouse to enter selection mode, with iOS-style scale + ring feedback and a light haptic tap on supported devices. New Hide / Show buttons in the bulk toolbar.

Mobile UI

  • Slide-over sidebar, full-width modal sheetsompact phone header on both the public andadmin pages.
  • Admin top bar collapses theme / settings / overflow menu on phones, so the search barfinally has room to breathe.
    Polish
  • Admin sidebar redesign: hover actions fade in over the count badge instead of truncating group names; active state is clearly distinct from hover; a vertical-bar cons under their group.
  • Unified card meta strip — group tags, "Hidden", "Dead link", and click-count chips now share the same baseline and spacing.
  • Collapsible Changelog block in the admin sidebar, with a link to the GitHub repo.
    Security & fixes
  • Auth rate limiter now only counts failed verifications, so refreshing the admin page no longer locks you out of your own session. Brute-force protection is preser
  • Multer file-filter errors return a JSON 400 instead of an HTML 500.
  • Inline section input has a once-guard so th double-creating duplicate sections.

Schema

  • New tables: link_groups, sections.
  • New columns: groups.password_hash, links.is_hidden, links.file_path, links.file_name, link_groups.section_id.
  • Idempotent migration on first startup copielues into link_groups — no manual stepsrequired.

New API endpoints

POST/DELETE /api/settings/favicon · POST /api/settings/pinned-group · POST /api/links/:id/visibility · POST
/api/groups/:id/unlock · POST /api/groups/:idsections · PUT/DELETE /api/sections/:id · POST /api/sections/reorder

Upgrading

docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml up

Your existing data is migrated automatically