qTe Docs — Syndication
Syndication
Publishing, feed system, dynamic filters, deduplication, and import workflows
Syndication Overview
Syndication allows users to share encoded content publicly through the qte.app hub account.
Published items appear in the syndication feed, where other qTe users can browse, filter, import, and decode
shared content.
Publishing Workflow
Publishing writes a syndication record to the hub account's AT Proto repository. The record contains
metadata about the encoded content — not the content itself.
Publish Steps
- User encodes content (creates Symph + offsets + metadata)
- User selects "Publish" or "Publish & Syndicate" from the Publish page
- App creates a syndication record with: Symph, title, author, tags, category, timestamp, size
- Record is written to
app.qte.syndication collection on the hub account's PDS
- Optional: attach a meme image to the syndication record
Author identity: The author field uses the user's AT Protocol handle
(e.g., @username.bsky.social), providing decentralized identity verification.
Feed Loading & Processing
When loading the syndication feed, the app pulls records from the hub's
app.qte.syndication collection and processes them through several stages:
Dynamic Filters
Filters are built dynamically from the feed data — not from a static list.
The UpdateDynamicFilters() method extracts unique categories, authors, and tags
from all feed items and populates dropdown/picker lists.
Filter Types
| Filter | Source | Behavior |
SearchQuery | Text input | Matches against title, author, tags, text (case-insensitive) |
SelectedCategory | Dropdown/Picker | Filters by category icon/name — built from feed data |
SelectedAuthor | Dropdown/Picker | Filters by author handle — built from feed data |
SelectedTag | Dropdown/Picker | Filters by tag — built from feed data |
StripSystemTags
System tags ("published", "syndicated") are automatically stripped from the
comma-separated tag string before display. These are internal workflow markers, not user-visible tags.
Deduplication
Feed items are deduplicated by Symph identifier. When multiple records share the same
Symph (e.g., re-published or re-syndicated), only the newest record is kept.
This uses a HashSet<string> tracking seen Symphs, processing items from newest to oldest.
// Dedup logic (simplified)
var seenSymphs = new HashSet<string>();
var sorted = items.OrderByDescending(i => i.Timestamp);
foreach (var item in sorted)
{
if (!seenSymphs.Add(item.Symph)) continue; // skip duplicate
filteredList.Add(item);
}
Import & Decode
From the syndication feed, users can:
- Import: Download the offset file and metadata from the author's PDS to local storage. The content is now available for local decoding.
- Decode: If offsets are already local, decode the Symph directly to restore original data.
Hub Account (qte.app)
The hub account qte.app serves as the central syndication broadcast point. Its PDS
repository holds all app.qte.syndication records. When users pull the syndication feed,
they read from this account's repository.
Hub Details
| Handle | qte.app |
| Role | Syndication broadcast aggregator |
| Collection | app.qte.syndication |
| Access | Read-only for consumers, write during publish |