Hosted onhyper.mediavia theHypermedia Protocol
Pear Tree
a
one
two
three
Embed:
test discover
2
query block:
Funnel Analytics
https://linear.app/seedhypermedia/issue/SHM-2056/project-funnel-analytics Our funnel identifies a user and measures the conversion rate from one step to the next step. We need to identify the pain points at each step to boost conversion rates. A Growth Funnel is a bit different from a UX Funnel. The Growth Funnel should be a single instance across the system. It is core to the strategy and to every member of the team. Once we discover our Growth Funnel, it seldom changes. UX Funnels are a design tool. They can change all the time with different experiments. Growth Funnel UX funnels
Design Project: New Users quickly understand the Basics of Seed Hypermedia
Outcome: New Users quickly understand the Basics of Seed Hypermedia Sketching Final Design Tasks
Fix the Double-Subscribe Button
This is a small and focused project that is aimed to solve the double-subscribe button. If you want to see the roadmap for subscriptions, look at  We are ready to do this project now. It is a pretty simple frontend change. Unlike the grand plan for subscriptions, this project does not require a new identity system. Problem Solution Implementation Notes
Project Task: Combine Favorites and Sync Subscriptions
Problem 01 Solution
Project: Introducing list node type
This project explains the problems with our current list implementation and proposes additions to editor schema that should handle lists better.
Image Handling in Web Comment Editor
https://linear.app/seedhypermedia/issue/SHM-1622/i-cant-paste-images-on-web-mobile-comment-box
Project Task: Create Document
https://linear.app/seedhypermedia/issue/SHM-2031/project-task-create-document
Navigation Infrastructure
https://linear.app/seedhypermedia/issue/SHM-2020/project-navigation-infrastructure
Editor test coverage
https://linear.app/seedhypermedia/issue/SHM-2016/editor-test-coverage
Design Project: Identity System
We are still shaping the design methodology. Please be flexible and constructive. Currently, we have two Active Design Projects. The other one is . It is hard to have two active projects at the same time, but we want to unblock  with this one so he can start working on the cryptography and backend. A Design Project is different from a Development Project, which we have been using all these years. A Design Project involves deep design work, every team member is expected to participate, and it is usually composed of more than one Development Project. Our Design Process follows Google's Design Sprint Methodology. The goal is to provide a mix of methods for meetings and async work. We can use different techniques depending on the Design Project. However, we should always be aware of the 6 phases. It is very probable that every time we skip a phase, we will end up having to come back and redo it, because the outcome won't work. Below are the 6 phases applied to the current Identity System Design Project. Each document should be a method output. Let's see how we operate async! Everybody is expected to: Phase 1: Understanding Phase 2: Define Phase 3: Sketch Phase 4: Decide Phase 5: Prototype Phase 6: Validation Project Tasks
Zero-Knowledge Multi-Device Identity System
Problem Scope Solution Rabbit Holes
Data Normalization
Problem Solution Scope Rabbit holes No goes Prior art Search Example: { // ...search result data } move document examples
Daemon pushing algorithm
This document tries to enumerate blobs that need to be synced in order to render a proper document
Discussions Follow-Up
Problem Solution Conversations on Document Discussion and Activity Panels
Standalone Email Service
Problem Solution
test
Improve Web Data Loading
Problem Solution export const loader = dataLoader(async (load, request) => { // this server loader is entirely optional! if you skip this, everything will be loaded with AJAX requests like we do in the desktop app const doc = await load(request.params.profileId) await loadEmbeds(load, doc) }) export default const webPageContainer(params => { const { docId } = params return <DocPage id={docId} /> }) function DocPage({id}) { // shared with desktop const doc = useResource(id) return <DocumentContent doc={doc} /> } // deep within document content, it renders this component function ContentEmbed({id}) { // shared with desktop const doc = useResource(id) return <DocumentContent doc={doc} /> } In this example, the webPageContainer wraps the whole page with a client provider that has preloaded all the embed content. This means that the deep useResource in the <ContentEmbed> has access to the data that was preloaded by the server. Scope Rabbit Holes No Goes
Channel-Based Release workflow
Releasing by pushing a tag is not the best way to trigger app releases
Activity Filtering
User Stories covered by this project Problem
Comment Blocks Embedding
Linking to specific parts of comments is very important and we as users are starting to feel the need of doing it.
Profile page everywhere
Notes Description The Profile button on the Mobile Navigation Menu is terrible!
Edit Web Documents
Two Document Panels
Maps Block
Comment Icon on document header
Two Clicks Profiles Linking
This user story requires the user to perform a trillion clicks! They should be just two clicks! one in each window!
Merge Create Account and Subscribe Email
Private document collaboration
Create and share documents only among a selected group of accounts so that they can review and collaborate.
Mobile formatting toolbar
Problem Solution Proposed approaches Concerns and questions Notion floating toolbar Blocknote floating toolbar Notion and blocknote both use floating toolbars!
Killing the Web Redirect for Commenting
Status: Completed. This project is considered completed when we enabled signing comments on any Hypermedia web site. Now instead of going via the redirect flow to hyper.media users are able to create a key right on the web site they are looking at, and sign their comments with that key. Linking this key to your desktop app and/or other keys you might have will be covered by a separate project. Problem Solution Rabbit Holes No Gos
General Feed / For You Page (Design for Feed)
This document looks to answer to the following user story> If we want a way for users to be able to see all the activity for the documents they have subscribed to as well as the communities they belong to, the best thing we can do is adopt the feature of a home feed/ for "For You Page" that many social media platforms like: X, Medium, Substack amongst many other use to keep their users up to date with general information of what's happening. The feed needs to incorporate both information for the node as well as information form all subscribed sites. To start it would be ideal to have document related information (document creation and document updates) as well as information on discussions (new discussions and replies). Proposed design look The look for the design was inspired form Substack which uses a combination of document posts in the feed with discussion posts of a sort. Take in mind that this was adjusted to takin into account the needs and stories relevant to Seed users. Substack Replies Threading and Commenting on The Feed Clicking a thread will also open up the threaded discussion similar to how X does it. It will open the thread depending on where you want to reply.
Look at all site Activity
This document looks to answer the following user story: Users currently viewing a document's feed can only see activity specific to that document. The only way for them to see activity from the entire site is to go to the home document, which may not contain content they are interested in. They simply want to see the entire site's activity. The best solution for this is for the feed to be able to display both the document's feed and the entire site's feed. Library as a Document Directory and Activity Hub
Subscribing to email notifications without an account
User Story: . Refactor By subscribing to a site, a user will get notified of the latest activity on that site. Readers: Commenter: Owner/Author
Give publishers access to site statistics
How to give access to statistics to site owners depending if they self host or not.
Semantic Search
This Is related to the story Find what is relevant. The immediate application would be to search for relevant content given some keywords. Documents relating to those keywords should pop up even if those words were never written literally. Also, searching in different languages. Searching for terms or concepts in a language, would yield results in another language. Other applications, and taking advantage of LLM models (out of the scope of this project) to generate the keywords themselves (reading the current document and coming up with relevant keywords) Then the semantic search would find similar documents/fragments. The LLM would be exposed via an Openai API compatible way so that the frontend could use it however it wants. The backend would implement the MCP tools and the model itself. Data Embedding First we have to vectorize the texts using an embedding model. These models translate text to a numeric representation so that we can apply a distance algorithm later given a query (also needs to be vectorized). This vectorizing process is multilingual so we can support major languages and the resulting numeric data would be the same independently of the language used. This is one of the benefits over traditional search, where no matter what languages you use in the query, you will find results with similar ideas no matter the language. The golang go-llama-cpp binding does not support new architectures (like bert) since it is based on old versions ob llama.cpp and its not currently maintained. The ollama engine is a separate process that needs to run in parallel. So the only real option to ship an embedding model with the daemon is to use the onnx runtime for golang We should load a dynamic library (.so in linux and Mac, dll in windows) and then load the models. A good enough model is multilingual-e5-small, especially in its qint8 version. Its just 118 MB and the tokenizer about 17MB. As long as we ship those three files along with the daemon (library, model, tokenizer) we are good to go. The process of vectorization is slow (even though we can do it in batches) so it will slow down the reindex process. However, as the search text is already stored in the db, we can populate the embeddings table on the background once the reindex process has finished. On a live index (for example when we create a new change) the embedding overhead is minimal. Vector search
Revocation of Permissions
This is a WIP document. It's related to the user story of . Problem Solution Rabbit Holes
Activity Feed
We want to bring back Feeds. Problem Solution API Support
Show Document discussions in the document content
users want a way to show a list of discussions in the document content
Add steps to the Wordpress importer for long repositories
TBD 
Email Notifications for site owners
WordPress importer
Objective Import content from WordPress into Seed Hypermedia, turning posts/pages into documents in a site? Import workflow Possible libraries Edge cases Questions Should I just try calling API with /wp-json/? Apparently API key is only needed for private content or authenticated actions. Each post includes:    is my understanding of the project correct?
Improve search results ordering
Solution to make recent relevant matches appear first
Role Invites
Invite link generation When clicking on invite link you will get a generated link with the selected role. If you want to change duration for the link, number of people that can use it or role you will be able to do this on the invite settings. Discord invites where taken as a reference Invite Membership
Commentor Role
The commentor role is someone who is allowed to view and write comments even if this permissions have been disabled in the document. Joining Experience For Users Document Access Panel
Contact Improvement
Problem Solution Design Idea
Inbox
Problem Solution Rabbit Holes / Concerns
Branch Following
Unify the Search experience across the app
Problem Solution I believe we can use a library like DownShift to create the primitives for all the search instances we need. Scope Rabbit Holes No-Gos
Comment URLs
We need to be able to copy comment URLs, open comment URLs on web and desktop, and we should be able to embed documents Owner: 
Comment search
Now that we have comment IDs we can include back comments in search results
Contact Search
A contact is a relation between two accounts so for each account i am logged in, I pick a name (not the publishable name) of the other account. But right now, we don't search for contacts. We need to change the search API to take the account we are logged as and the backend should find the contacts matching the search input. Questions. What's a contact in the permanent data?
I have created a new guide for custom domain please review!
   
Paid Content
Problem Solution Behavior Downsides Scope
Cross-Site Signing
Problem Solution In the original window where the comment draft exists, there is an iframe which has loaded the identity provider hyper.media/hm/embed/auth. Internally it is polling the indexeddb for the containing origin's abilities. When they change, they are and communicated via postmessage so the publisher knows what sort of content can be signed in the iframe. When the comment is submitted, air.com passes in the unsigned comment blob to the identity provider iframe (again, via postmessage). The identity provider iframe will make sure the ability is present and valid. Then will sign it. It will pass the signed comment back to the air.com who requested it. At this point the signed comment needs to be saved to at least one server, and it can be sent to air.com or hyper.media, or both, whoever is willing to distribute it. For now, air.com will be the one responsible for saving and distributing the comment blob, which will result in a good UX because the comments will be refetched after saving to show the user the comment they just created. Why this is Secure Concerns
Investigate Web Authentication
Problem Solution Alternative: Seed Phrase with Local Storage Cross-Domain Strategy Implementation Strategy
Unified Activity Section
Problem Solution Scope Rabbit Holes
Hypermedia Comment URLs
Problem Solution Scope
Write Document Structure
Problem Solution Scope Rabbit Holes No Goes
Project: Broadcasting