Krishna KumarandClaude Opus 5 bc65bb586c
CI / build-and-deploy (push) Successful in 37s
CI / build-and-deploy (pull_request) Successful in 20s
Brand mark: scallop ribbon shape, app icon in light / dark / tinted
The mark is one closed path with a scalloped baseline — four tails, rounded
cap — rather than a stack of separate ribbons. That is the whole design
decision. A logo gets tested at 16pt in a Spotlight result and in iOS 26's
tinted and monochrome icon modes, where the palette is discarded and only the
silhouette survives. Arrangements of N separate ribbons collapse into a blob
under both, because the shapes were only ever told apart by colour; a
scalloped outline is told apart by its own edge, so it reads the same tinted,
monochrome, and 16pt tall.

ScallopMark defines geometry in a canonical 88x98 box and fits it to whatever
rect it is handed, so proportions cannot drift with the container. MarksMark
adds the three bands as a hard-stopped gradient, keeping it a single fillable
shape. The bands are Paper.swatchPairs entries rather than bespoke brand
colours: the app already hashes every bookmark into that palette, so the mark
is made of the same ink as the content.

App icon ships all three variants per Apple's iOS 18+ model — light flattened
(iOS rejects an alpha channel there), dark and tinted on transparency for the
system to composite. The tinted variant carries three greys ordered by the
colour version's relative luminance rather than one flat grey, so the band
reading survives the one mode that has nothing else left.

The PNGs are build output: edit scripts/appicon/appicon.html and re-run
generate.sh. docs/logo-variants.html and docs/logo-c1-variants.html are the
exploration the choice came out of.

Verified: SwiftUI shape rendered through ImageRenderer matches the SVG at
every size from 160pt to 16pt; assetutil confirms all three renditions in the
compiled catalog with the correct appearance tags; installed on a simulator
and checked against the home screen.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-03 11:55:39 -05:00
2026-07-02 16:35:02 -05:00
2026-07-02 00:33:49 -05:00

Marks

A native iOS client for linkding, the self-hosted bookmark manager.

Built from scratch in SwiftUI targeting iOS 26. Replaces the previous Flutter-based app.

Features

  • Browse and search your bookmarks
  • Swipe to delete or archive
  • Add bookmarks manually
  • Share to Marks from any app (share extension)
  • Tag browser — see all tags sorted by count, tap to filter
  • Native search tab with instant client-side filtering
  • AI enrichment via OpenRouter — auto-generates summaries and tags for each bookmark
  • Semantic search — rank bookmarks by relevance using AI
  • Smart Collections — AI groups your bookmarks into themed collections
  • Pagination — loads more as you scroll

Requirements

  • iOS 26+
  • A running linkding instance with API access
  • (Optional) An OpenRouter API key for AI features

AI Features

All AI features are optional and powered by OpenRouter using google/gemini-2.0-flash-lite-001 — one of the cheapest available models (~$0.075/M input tokens).

Feature What it does
Auto-enrichment Generates a one-sentence summary and 3-5 tags for each bookmark
Semantic search Ranks your bookmarks by relevance to a natural language query
Smart Collections Groups up to 150 bookmarks into 3-6 themed collections

Add your OpenRouter API key in Settings to enable these features.

Building

Requires xcodegen.

brew install xcodegen
xcodegen generate
open Marks.xcodeproj

Then build and run in Xcode. The project uses automatic signing — set your development team in project.yml under DEVELOPMENT_TEAM.

Architecture

  • SwiftUI with @Observable and @MainActor throughout (Swift 6 strict concurrency)
  • LinkdingAPI — thin wrapper around the linkding REST API
  • ClaudeService — OpenRouter client for AI enrichment, semantic search, and collections
  • BookmarksViewModel — central state: bookmarks list, pagination, search, enrichment progress
  • App Groups — share extension and main app share credentials via group.com.magicive.marks
  • UserDefaults — AI summaries and tags cached locally by bookmark ID

Project structure

Marks/
  Models/         Bookmark, ServerConfig, SmartCollection
  Services/       LinkdingAPI, ClaudeService
  Views/          BookmarksView, TagsView, SearchView, SettingsView, …
  Assets.xcassets App icon and assets
ShareExtension/   iOS share extension (zero-tap bookmark saving)
project.yml       xcodegen project spec
S
Description
Native iOS client for linkding — SwiftUI, iOS 26, AI enrichment via OpenRouter
Readme
2.8 MiB
Languages
Swift 97.7%
Shell 1.4%
HTML 0.9%