Magic-Mark — Examples
Editorial workflow
For a blog with multiple editors:
📝 My drafts
Owner: Alice
Visibility: Private
Filter: author=me AND publishedAt=null
Sort: updatedAt:desc
👀 In review
Visibility: Roles [Senior Editor]
Filter: status=review
Sort: submittedAt:asc (oldest first, FIFO)
🔥 Hot this week
Visibility: Roles [Editor, Senior Editor]
Filter: publishedAt>=this-week
Sort: views:desc
🗑️ Recently deleted
Visibility: Private
Filter: publishedAt!=null AND deletedAt>=today-7
Sort: deletedAt:descEach editor pins their own "My drafts" and sees the shared queues.
Moderation queue
For user-generated content:
🚨 Reported
Visibility: Roles [Moderator, Admin]
Filter: reports>0 AND moderationStatus=pending
Sort: reports:desc
⚠️ Spam candidates
Visibility: Roles [Moderator]
Filter: spamScore>70
Sort: spamScore:desc
✓ Approved today
Visibility: Roles [Moderator, Admin]
Filter: moderationStatus=approved AND approvedAt>=today
Sort: approvedAt:descMulti-tenant SaaS
For a B2B app where each admin sees their tenant's data:
🏢 Tenant Acme content
Visibility: User-specific [acme-admin@example.com]
Filter: tenant=acme
Sort: createdAt:desc
🏢 Tenant Widgets content
Visibility: User-specific [widgets-admin@example.com]
Filter: tenant=widgets
Sort: createdAt:descEach tenant admin sees only their tenant's content via a scoped bookmark.
Personal dashboard
Productivity-focused bookmarks for individual users:
🎯 Today's focus
Visibility: Private
Filter: assignedTo=me AND dueDate<=today AND status!=done
Sort: priority:desc
💼 This sprint
Visibility: Private
Filter: sprint=current AND assignedTo=me
Sort: status:asc
📊 My numbers
Visibility: Private (+ pinned)
Filter: author=me AND publishedAt!=null
Sort: views:descAnalytics views
Bookmarks optimized for insights:
📈 Top of the week
Visibility: Roles [Marketing, Analytics]
Filter: publishedAt>=this-week
Sort: views:desc, shares:desc
Page size: 50
📉 Underperforming
Visibility: Roles [Marketing]
Filter: publishedAt<this-month AND views<100
Sort: publishedAt:desc
🏆 All-time best
Visibility: Roles [Marketing, Management]
Filter: publishedAt!=null
Sort: views:desc
Page size: 25Quick support access
For customer support:
🆕 New today
Visibility: Roles [Support]
Filter: createdAt>=today AND status=open
Sort: createdAt:desc
⏰ Overdue
Visibility: Roles [Support, Support Manager]
Filter: responseTime>24h AND status=open
Sort: createdAt:asc (oldest first)
✅ My resolved this week
Visibility: Private
Filter: resolvedBy=me AND resolvedAt>=this-week
Sort: resolvedAt:descSeasonal / campaign-specific
Temporary bookmarks for specific time windows:
🎅 Black Friday 2026 content
Visibility: Roles [Editor, Marketing]
Filter: tag=black-friday-2026
Sort: publishedAt:desc
(Unpin or delete after the campaign)Programmatic bookmark creation (Advanced tier)
Create bookmarks as part of a setup script:
typescript
// scripts/seed-bookmarks.ts
import { strapi } from './strapi-admin';
async function seed() {
const service = strapi.plugin('magic-mark').service('bookmarks');
// One bookmark per role, created by super-admin
const roles = [
{ name: 'Support', bookmarkName: '🆕 New tickets', filters: { status: 'new' } },
{ name: 'Editor', bookmarkName: '📝 My drafts', filters: { publishedAt: null } },
{ name: 'Moderator', bookmarkName: '🚨 Reported', filters: { reports: { $gt: 0 } } },
];
for (const role of roles) {
await service.create({
ownerId: 1, // super-admin
name: role.bookmarkName.split(' ').slice(1).join(' '),
emoji: role.bookmarkName.split(' ')[0],
collection: 'api::article.article',
query: { filters: role.filters, sort: [{ updatedAt: 'desc' }] },
visibility: 'roles',
sharedRoles: [role.name],
});
}
}
seed().then(() => console.log('Bookmarks seeded'));Deep-link to a bookmark
Generate a URL that opens Strapi Content Manager with the bookmark applied:
typescript
const res = await fetch(`http://localhost:1337/magic-mark/bookmarks/${bookmarkId}/apply`, {
headers: { Authorization: `Bearer ${adminToken}` },
});
const { url } = await res.json();
// Share this URL in Slack, email, task trackerIntegration with external tools
Post a daily Slack summary of the team's favorite bookmarks:
typescript
// src/cron.ts
export default {
'0 9 * * 1-5': async ({ strapi }) => { // weekdays at 9am
const analytics = await fetch(`${process.env.STRAPI_URL}/magic-mark/analytics`, {
headers: { Authorization: `Bearer ${process.env.STRAPI_ADMIN_TOKEN}` },
}).then(r => r.json());
const top3 = analytics.topBookmarks.slice(0, 3);
await fetch(process.env.SLACK_WEBHOOK_URL, {
method: 'POST',
body: JSON.stringify({
text: `Top bookmarks yesterday:\n${top3.map(b => `• ${b.name} (${b.applicationsLast30Days}×)`).join('\n')}`,
}),
});
},
};Next: Troubleshooting →