In development
LinkHub
A platform for organizing web resources into curated guides that can be shared or exported.
LinkHub began with a problem in my own workflow: I was saving online resources faster than I could organize or find them again. The project has grown into a backend for curated resource guides that researchers, writers, and other people sharing links can maintain in one place.
My role
I built the original bookmark-management API and am developing the second version around organizing and sharing guides. My work covers the backend, data model, authentication, import pipelines, and export workflows.
From saved bookmarks to reusable guides
The first version used Flask and MySQL to organize links into repositories and tags. It supported creating, reading, updating, and deleting records, along with authentication and documented API endpoints.
As the project developed, the focus shifted toward collections that others could use. A guide can bring related resources together, be updated in one place, and be shared through a single link or exported as a document.
Organizing and sharing collections
The current backend uses NestJS, PostgreSQL, and Prisma in a Bun workspace. Each user has one personal hub containing their collections. Sharing happens at the collection level:
- Guides with sections: A collection can contain sections, with nesting limited to two levels to keep the structure understandable.
- Reader and editor access: Share a collection with specific people, enable a read-only share link, or publish it for discovery. Access carries down to the guide's sections.
- Stable references: Collections use durable identifiers so changing a hub's handle does not break saved references.
Authentication uses Better Auth with database-backed sessions. A separate collection policy handles authorization, keeping sign-in and permission to read or edit a guide as distinct responsibilities.
Bringing resources in and taking guides out
Imports accept browser bookmark HTML and a universal CSV format. URL normalization helps identify duplicates, and per-row reports show which entries were imported, skipped, or need correction.
Exports generate Markdown, PDF, or Word documents directly in the request. A guide includes its sections in order; exporting several collections returns a ZIP containing a document for each. The current export path does not depend on background queues.
Current state and next steps
The v2 backend API is functional, with the core organization, import, sharing, and export features in place. The project remains under active development. A web application and browser extension are planned; they are not yet part of the delivered experience.