Admin
@if (!status?.connected) {
}
@if (status?.connected) {
Cache Sync
Refreshes cached follows/followers, recent home timeline activity, notifications, and your own recent posts for the connected identity.
Status: Connected
Last Sync: {{ status?.last_sync | date: 'medium' }}
{{ syncing ? 'Syncing...' : 'Force Refresh Cache' }}
Own Account Archive
Fetches your full Mastodon posting history from your own account and stores it in the cache for static blog generation. This can take a while on older accounts.
@if (ownAccountError) {
{{ ownAccountError }}
}
@if (ownAccountMessage) {
{{ ownAccountMessage }}
}
{{ ownAccountSyncing ? 'Importing...' : 'Initialize/Catch Up Own Account' }}
Catch-Up
@if (catchupError) {
{{ catchupError }}
}
@if (!catchupStatus?.running) {
{{ catchupLoading ? 'Starting...' : 'Catch Up Now (Urgent)' }}
Start Trickle
}
@if (catchupStatus?.running) {
Stop
}
@if (catchupStatus) {
{{ catchupStatus.running ? 'Running' : 'Finished' }} — {{ catchupStatus.mode }}
{{ catchupStatus.done }}/{{ catchupStatus.total }} accounts
@if (catchupStatus.current_acct) {
Processing: {{ catchupStatus.current_acct }}
}
@if (catchupStatus.errors > 0) {
{{ catchupStatus.errors }} errors
}
@if (catchupStatus.rate_limited) {
Rate limited — backing off
}
Started: {{ catchupStatus.started_at | date: 'shortTime' }}
@if (catchupStatus.finished_at) {
Finished: {{ catchupStatus.finished_at | date: 'shortTime' }}
}
}
@if (catchupQueue && catchupQueue.queue.length > 0) {
Priority Queue (first {{ catchupQueue.queue.length }})
@for (entry of catchupQueue.queue; track entry.acct; let i = $index) {
{{ i + 1 }}
{{ entry.display_name || entry.acct }}
@{{ entry.acct }}
@if (entry.is_followed_by) {
mutual
}
@if (entry.last_status_at) {
{{ entry.last_status_at | date: 'mediumDate' }}
}
}
Refresh Queue
}
@if (catchupQueue && catchupQueue.queue.length === 0) {
No accounts in the catch-up queue.
}
Content Hub Bundles
{{ syncingFollows ? 'Syncing...' : 'Sync Server Follows' }}
+ New Bundle
@if (bundlesError) {
{{ bundlesError }}
}
@if (editState) {
{{ editState.bundleId === null ? 'New Bundle' : 'Edit Bundle' }}
Name
Terms
+ Add term
@for (term of editState.terms; track $index; let i = $index) {
# hashtag
search
×
}
@if (editState.terms.length === 0) {
No terms yet — add at least one hashtag or search query.
}
@if (editState.error) {
{{ editState.error }}
}
Cancel
{{ editState.saving ? 'Saving...' : 'Save' }}
}
@if (bundlesLoading) {
Loading...
}
@if (!bundlesLoading && bundles.length === 0 && !editState) {
No bundles yet. Create one or sync your server-side followed hashtags.
}
@for (bundle of bundles; track bundle.id) {
{{ bundle.name }}
@if (bundle.source_type === 'server_follow') {
server follow
} @else {
bundle
}
@for (term of bundle.terms; track term.id) {
{{ termTypeLabel(term) }} {{ term.term }}
}
@if (bundle.terms.length === 0) {
No terms
}
@if (bundle.last_fetched_at) {
Last fetched: {{ bundle.last_fetched_at | date: 'short' }}
}
@if (!bundle.is_read_only) {
Edit
{{ deletingId === bundle.id ? '...' : 'Delete' }}
}
}
}