- Trim sponsor memo to CodeRabbit + SSD Nodes, concise single-tier layout
- Add a demo personal access token (Bearer memos_pat_demo) for the admin user
- Stagger memo created_ts relative to seed time so the demo timeline always
looks recent; lead the pinned section with the Welcome memo
- Unpin the Scratchpad promo and drop the fixed "June" movie-marathon label
INSERTINTOmemo(id,uid,creator_id,content,visibility,pinned,payload)VALUES(1,'welcome2memos001',1,replace('# Welcome to Memos 👋\n\nAn open-source, self-hosted note-taking tool for people who think in fragments. Capture quickly, organize lightly, own everything.\n\n> Most apps treat notes like documents. Memos treats them like thoughts — short, timestamped, searchable.\n\n## Try it right now\n\n- [x] Open this memo\n- [ ] React with 🎉 below\n- [ ] Scroll the timeline to see what others have written\n- [ ] Write your own first memo\n\n## What you can do here\n\n| Feature | Example |\n|---------|---------|\n| **Markdown** | Headings, **bold**, *italic*, `code`, ~~strikethrough~~ |\n| **Tags** | Type `#anything` and it becomes a filter |\n| **Task lists** | `- [ ]` checkboxes that toggle inline |\n| **Code blocks** | Fenced blocks with syntax highlighting |\n| **Tables** | Pipes and dashes — yes, this one |\n| **Attachments** | Drag images, videos, or files right in |\n| **Location** | Geotag a memo to where you wrote it |\n| **Relations** | Link memos together as references or replies |\n\n## Self-host in one command\n\n```bash\ndocker run -d -p 5230:5230 -v ~/.memos:/var/opt/memos neosmemo/memos:stable\n```\n\nThen open `http://localhost:5230` and start writing.\n\n---\n\nScroll the timeline to see each feature used in real memos. #welcome #getting-started','\n',char(10)),'PUBLIC',1,'{"tags":["welcome","getting-started"],"property":{"hasLink":false,"hasCode":true,"hasTaskList":true,"hasIncompleteTasks":true}}');
-- 1. Welcome Memo (Pinned) — newest created_ts so it leads the pinned section
INSERTINTOmemo(id,uid,creator_id,created_ts,updated_ts,content,visibility,pinned,payload)VALUES(1,'welcome2memos001',1,strftime('%s','now','-2 days'),strftime('%s','now','-2 days'),replace('# Welcome to Memos 👋\n\nAn open-source, self-hosted note-taking tool for people who think in fragments. Capture quickly, organize lightly, own everything.\n\n> Most apps treat notes like documents. Memos treats them like thoughts — short, timestamped, searchable.\n\n## Try it right now\n\n- [x] Open this memo\n- [ ] React with 🎉 below\n- [ ] Scroll the timeline to see what others have written\n- [ ] Write your own first memo\n\n## What you can do here\n\n| Feature | Example |\n|---------|---------|\n| **Markdown** | Headings, **bold**, *italic*, `code`, ~~strikethrough~~ |\n| **Tags** | Type `#anything` and it becomes a filter |\n| **Task lists** | `- [ ]` checkboxes that toggle inline |\n| **Code blocks** | Fenced blocks with syntax highlighting |\n| **Tables** | Pipes and dashes — yes, this one |\n| **Attachments** | Drag images, videos, or files right in |\n| **Location** | Geotag a memo to where you wrote it |\n| **Relations** | Link memos together as references or replies |\n\n## Self-host in one command\n\n```bash\ndocker run -d -p 5230:5230 -v ~/.memos:/var/opt/memos neosmemo/memos:stable\n```\n\nThen open `http://localhost:5230` and start writing.\n\n---\n\nScroll the timeline to see each feature used in real memos. #welcome #getting-started','\n',char(10)),'PUBLIC',1,'{"tags":["welcome","getting-started"],"property":{"hasLink":false,"hasCode":true,"hasTaskList":true,"hasIncompleteTasks":true}}');
-- 2. Reading Note — book quote + personal reflection (Alice)
INSERTINTOmemo(id,uid,creator_id,content,visibility,payload)VALUES(2,'readingnote0001',2,replace('## 📖 Reading: Deep Work #books #reading\n\nStarted Cal Newport''s *Deep Work* this week. This passage stopped me:\n\n> "Human beings, it seems, are at their best when immersed deeply in something challenging."\n\nThat''s the whole pitch in one sentence. The rest of the book is just evidence for it.\n\nTrying an experiment for the next two weeks: no Slack or email until 11am. See what shifts when the morning is mine.','\n',char(10)),'PUBLIC','{"tags":["books","reading"],"property":{"hasLink":false},"location":{"placeholder":"Sightglass Coffee, San Francisco, California, United States","latitude":37.7726,"longitude":-122.4099}}');
INSERTINTOmemo(id,uid,creator_id,created_ts,updated_ts,content,visibility,payload)VALUES(2,'readingnote0001',2,strftime('%s','now','-22 days'),strftime('%s','now','-22 days'),replace('## 📖 Reading: Deep Work #books #reading\n\nStarted Cal Newport''s *Deep Work* this week. This passage stopped me:\n\n> "Human beings, it seems, are at their best when immersed deeply in something challenging."\n\nThat''s the whole pitch in one sentence. The rest of the book is just evidence for it.\n\nTrying an experiment for the next two weeks: no Slack or email until 11am. See what shifts when the morning is mine.','\n',char(10)),'PUBLIC','{"tags":["books","reading"],"property":{"hasLink":false},"location":{"placeholder":"Sightglass Coffee, San Francisco, California, United States","latitude":37.7726,"longitude":-122.4099}}');
INSERTINTOmemo(id,uid,creator_id,content,visibility,payload)VALUES(3,'gitcheatsheet01',1,replace('## ⚡ Git Commands I Keep Forgetting #dev #cheatsheet\n\nPinning this so I stop googling the same things every week.\n\n```bash\n# Show the last commit in detail\ngit show --stat HEAD\n\n# Undo the last commit, keep changes staged\ngit reset --soft HEAD~1\n\n# Stash including untracked files\ngit stash push -u -m "wip: before refactor"\n\n# Find which commit introduced a string\ngit log -S "function_name" --source --all\n```\n\nThe `-S` one is gold for archaeology — way better than scrolling blame.','\n',char(10)),'PUBLIC','{"tags":["dev","cheatsheet"],"property":{"hasLink":false,"hasCode":true}}');
INSERTINTOmemo(id,uid,creator_id,created_ts,updated_ts,content,visibility,payload)VALUES(3,'gitcheatsheet01',1,strftime('%s','now','-17 days'),strftime('%s','now','-17 days'),replace('## ⚡ Git Commands I Keep Forgetting #dev #cheatsheet\n\nPinning this so I stop googling the same things every week.\n\n```bash\n# Show the last commit in detail\ngit show --stat HEAD\n\n# Undo the last commit, keep changes staged\ngit reset --soft HEAD~1\n\n# Stash including untracked files\ngit stash push -u -m "wip: before refactor"\n\n# Find which commit introduced a string\ngit log -S "function_name" --source --all\n```\n\nThe `-S` one is gold for archaeology — way better than scrolling blame.','\n',char(10)),'PUBLIC','{"tags":["dev","cheatsheet"],"property":{"hasLink":false,"hasCode":true}}');
-- 4. Travel Bucket List (has location: Paris)
INSERTINTOmemo(id,uid,creator_id,content,visibility,payload)VALUES(4,'travelbucket01',1,replace('## 🌍 My Travel Bucket List #travel #bucketlist\n\n> Writing this from a tiny café near the Seine. Will keep updating after each trip. 📍\n\n### Places I''ve Been\n- [x] Paris, France — The croissants ruined every croissant after\n- [x] Shanghai, China — Modern skyline next to thousand-year-old temples, somehow it all works\n- [x] Grand Canyon, USA — Photos do not do this justice\n- [x] Barcelona, Spain — Gaudí''s architecture looks like it was built by a slightly chaotic deity\n\n### Dream Destinations\n- [ ] Northern Lights in Iceland — booking this for winter, *finally*\n- [ ] Safari in Tanzania\n- [ ] Great Barrier Reef, Australia — before it gets worse\n- [ ] Machu Picchu, Peru\n- [ ] Santorini, Greece\n- [ ] New Zealand road trip — south island, two weeks minimum\n\n### 2026 Plans\n- [ ] Book tickets to Iceland for winter\n- [ ] Research best time to visit Patagonia\n- [ ] Save up for Australia trip','\n',char(10)),'PUBLIC','{"tags":["travel","bucketlist"],"property":{"hasTaskList":true,"hasIncompleteTasks":true},"location":{"placeholder":"Paris, Île-de-France, France","latitude":48.8566,"longitude":2.3522}}');
INSERTINTOmemo(id,uid,creator_id,created_ts,updated_ts,content,visibility,payload)VALUES(4,'travelbucket01',1,strftime('%s','now','-13 days'),strftime('%s','now','-13 days'),replace('## 🌍 My Travel Bucket List #travel #bucketlist\n\n> Writing this from a tiny café near the Seine. Will keep updating after each trip. 📍\n\n### Places I''ve Been\n- [x] Paris, France — The croissants ruined every croissant after\n- [x] Shanghai, China — Modern skyline next to thousand-year-old temples, somehow it all works\n- [x] Grand Canyon, USA — Photos do not do this justice\n- [x] Barcelona, Spain — Gaudí''s architecture looks like it was built by a slightly chaotic deity\n\n### Dream Destinations\n- [ ] Northern Lights in Iceland — booking this for winter, *finally*\n- [ ] Safari in Tanzania\n- [ ] Great Barrier Reef, Australia — before it gets worse\n- [ ] Machu Picchu, Peru\n- [ ] Santorini, Greece\n- [ ] New Zealand road trip — south island, two weeks minimum\n\n### 2026 Plans\n- [ ] Book tickets to Iceland for winter\n- [ ] Research best time to visit Patagonia\n- [ ] Save up for Australia trip','\n',char(10)),'PUBLIC','{"tags":["travel","bucketlist"],"property":{"hasTaskList":true,"hasIncompleteTasks":true},"location":{"placeholder":"Paris, Île-de-France, France","latitude":48.8566,"longitude":2.3522}}');
-- 5. Movie Watchlist — posted by Alice
INSERTINTOmemo(id,uid,creator_id,content,visibility,payload)VALUES(5,'moviewatch00001',2,replace('## 🎬 February Movie Marathon #movies #watchlist\n\nCatching up on films I''ve been meaning to watch for, uh, years.\n\n### This Month''s Queue\n\n| Movie | Genre | Status | Rating |\n|-------|-------|--------|--------|\n| The Grand Budapest Hotel | Comedy/Drama | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Inception | Sci-Fi | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Spirited Away | Animation | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Everything Everywhere All at Once | Sci-Fi/Drama | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Dune: Part Two | Sci-Fi | 📅 This weekend | — |\n| Oppenheimer | Biography | 📋 Queued | — |\n\n### Notes\n- **Grand Budapest Hotel**: Wes Anderson''s visual style is *chef''s kiss* ✨ Every frame could be a postcard.\n- **Inception**: Need to watch again to catch all the details. The hallway scene still holds up.\n- **Spirited Away**: Studio Ghibli never disappoints. Cried twice. No regrets.\n- **Everything Everywhere**: Watched it cold, did not expect the bagel.\n\n---\n\n**Next month**: Full Miyazaki marathon 🎨 Taking suggestions for which one to start with.','\n',char(10)),'PUBLIC','{"tags":["movies","watchlist"],"property":{"hasLink":false}}');
INSERTINTOmemo(id,uid,creator_id,created_ts,updated_ts,content,visibility,payload)VALUES(5,'moviewatch00001',2,strftime('%s','now','-9 days'),strftime('%s','now','-9 days'),replace('## 🎬 Movie Marathon #movies #watchlist\n\nCatching up on films I''ve been meaning to watch for, uh, years.\n\n### This Month''s Queue\n\n| Movie | Genre | Status | Rating |\n|-------|-------|--------|--------|\n| The Grand Budapest Hotel | Comedy/Drama | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Inception | Sci-Fi | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Spirited Away | Animation | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Everything Everywhere All at Once | Sci-Fi/Drama | ✅ Watched | ⭐⭐⭐⭐⭐ |\n| Dune: Part Two | Sci-Fi | 📅 This weekend | — |\n| Oppenheimer | Biography | 📋 Queued | — |\n\n### Notes\n- **Grand Budapest Hotel**: Wes Anderson''s visual style is *chef''s kiss* ✨ Every frame could be a postcard.\n- **Inception**: Need to watch again to catch all the details. The hallway scene still holds up.\n- **Spirited Away**: Studio Ghibli never disappoints. Cried twice. No regrets.\n- **Everything Everywhere**: Watched it cold, did not expect the bagel.\n\n---\n\n**Next month**: Full Miyazaki marathon 🎨 Taking suggestions for which one to start with.','\n',char(10)),'PUBLIC','{"tags":["movies","watchlist"],"property":{"hasLink":false}}');
-- 6. Comment on Welcome (by Alice)
INSERTINTOmemo(id,uid,creator_id,content,visibility,payload)VALUES(6,'welcomecmt00001',2,'Just set up my own instance — this is exactly the note-taking app I''ve been looking for! The interface is so clean 🙌','PUBLIC','{"property":{"hasLink":false}}');
INSERTINTOmemo(id,uid,creator_id,created_ts,updated_ts,content,visibility,payload)VALUES(6,'welcomecmt00001',2,strftime('%s','now','-1 days'),strftime('%s','now','-1 days'),'Just set up my own instance — this is exactly the note-taking app I''ve been looking for! The interface is so clean 🙌','PUBLIC','{"property":{"hasLink":false}}');
-- 7. Comment on Git Cheat Sheet (by Alice)
INSERTINTOmemo(id,uid,creator_id,content,visibility,payload)VALUES(7,'gitcheatcmt0001',2,'Saving the `git log -S` one — I''ve been doing this with grep through git blame outputs for years. So much cleaner. 🔥','PUBLIC','{"property":{"hasLink":false}}');
INSERTINTOmemo(id,uid,creator_id,created_ts,updated_ts,content,visibility,payload)VALUES(7,'gitcheatcmt0001',2,strftime('%s','now','-17 days','+5 hours'),strftime('%s','now','-17 days','+5 hours'),'Saving the `git log -S` one — I''ve been doing this with grep through git blame outputs for years. So much cleaner. 🔥','PUBLIC','{"property":{"hasLink":false}}');
-- 8. Reply on Git Cheat Sheet (by Demo)
INSERTINTOmemo(id,uid,creator_id,content,visibility,payload)VALUES(8,'gitcheatcmt0002',1,'Yeah `-S` is criminally underused. Also try `git log -p path/to/file` when you need the *content* changes for one file — same archaeology vibe.','PUBLIC','{"property":{"hasLink":false}}');
INSERTINTOmemo(id,uid,creator_id,created_ts,updated_ts,content,visibility,payload)VALUES(8,'gitcheatcmt0002',1,strftime('%s','now','-17 days','+6 hours'),strftime('%s','now','-17 days','+6 hours'),'Yeah `-S` is criminally underused. Also try `git log -p path/to/file` when you need the *content* changes for one file — same archaeology vibe.','PUBLIC','{"property":{"hasLink":false}}');
-- 9. Sponsor Memo (Pinned) — largest id so it sorts above Welcome among pinned memos
INSERTINTOmemo(id,uid,creator_id,content,visibility,pinned,payload)VALUES(9,'sponsor0000001',1,replace('Memos is free and open source, sustained by the companies and individuals who choose to back it. 🙏 Their support keeps the project independent — no ads, no telemetry, no paywalled features. If you build with Memos, please consider supporting them in return.\n\n## ⭐ Featured Sponsors\n\n<a href="https://coderabbit.link/usememos" target="_blank" rel="noopener"><img src="https://victorious-bubble-f69a016683.media.strapiapp.com/Orange_Typemark_43bf516c9d.svg" alt="CodeRabbit" height="44" /></a>\n\nCut code review time & bugs in half, instantly.\n\n[coderabbit.link/usememos →](https://coderabbit.link/usememos)\n\n---\n\n<a href="https://go.warp.dev/memos" target="_blank" rel="noopener"><img src="https://raw.githubusercontent.com/warpdotdev/brand-assets/refs/heads/main/Logos/Warp-Wordmark-Black.png" alt="Warp" height="44" /></a>\n\nThe agentic development environment.\n\n[go.warp.dev/memos →](https://go.warp.dev/memos)\n\n## 🤝 Supporting Sponsors\n\n- [SSD Nodes — Affordable VPS hosting for self-hosters](https://ssdnodes.com/?utm_source=memos&utm_medium=sponsor)\n- [InstaPods — Get your app online in seconds](https://instapods.com/?utm_source=memos&utm_medium=sponsor)\n\n---\n\nWant to see your company here? Reach out via [GitHub Sponsors](https://github.com/sponsors/usememos) — sponsorships fund ongoing development and keep Memos free for everyone.\n\n#sponsors','\n',char(10)),'PUBLIC',1,'{"tags":["sponsors"],"property":{"hasLink":true}}');
-- 9. Sponsor Memo (Pinned) — sits below Welcome in the pinned section (older created_ts)
INSERTINTOmemo(id,uid,creator_id,created_ts,updated_ts,content,visibility,pinned,payload)VALUES(9,'sponsor0000001',1,strftime('%s','now','-5 days'),strftime('%s','now','-5 days'),replace('Memos is free and open source, kept independent by its sponsors — no ads, no telemetry, no paywalls. 🙏 If you build with Memos, please consider supporting them in return.\n\n## ⭐ Sponsors\n\n<a href="https://coderabbit.link/usememos" target="_blank" rel="noopener"><img src="https://victorious-bubble-f69a016683.media.strapiapp.com/Orange_Typemark_43bf516c9d.svg" alt="CodeRabbit" height="44" /></a>\n\nCut code review time & bugs in half, instantly. [coderabbit.link/usememos →](https://coderabbit.link/usememos)\n\n---\n\n**SSD Nodes** — Affordable VPS hosting for self-hosters. [ssdnodes.com →](https://ssdnodes.com/?utm_source=memos&utm_medium=sponsor)\n\n---\n\nWant to see your company here? Reach out via [GitHub Sponsors](https://github.com/sponsors/usememos).\n\n#sponsors','\n',char(10)),'PUBLIC',1,'{"tags":["sponsors"],"property":{"hasLink":true}}');
-- 10. Scratchpad Promo (Pinned) — largest id so it sorts above other pinned memos
INSERTINTOmemo(id,uid,creator_id,content,visibility,pinned,payload)VALUES(10,'scratchpad0001',1,replace('## 🧩 Try Memos Scratchpad\n\nA lightweight visual canvas for quick thoughts, links, images, files, and small cards before they become polished notes.\n\n[Open Scratchpad →](https://usememos.com/scratchpad)\n\n| Need | Scratchpad helps you |\n|------|----------------------|\n| Capture fast | Double-click to add notes |\n| Arrange freely | Drag cards around |\n| Add context | Attach files, links, and images |\n| Move around | Zoom and pan without setup |\n\n### Local-first\n\nYour Scratchpad cards stay in your browser. Memos does not access, sync, or store them.','\n',char(10)),'PUBLIC',1,'{"tags":["scratchpad"],"property":{"hasLink":true}}');
-- 10. Scratchpad Promo (not pinned) — keeps the pinned section to Welcome + Sponsor, less ad-heavy
INSERTINTOmemo(id,uid,creator_id,created_ts,updated_ts,content,visibility,pinned,payload)VALUES(10,'scratchpad0001',1,strftime('%s','now','-8 days'),strftime('%s','now','-8 days'),replace('## 🧩 Try Memos Scratchpad\n\nA lightweight visual canvas for quick thoughts, links, images, files, and small cards before they become polished notes.\n\n[Open Scratchpad →](https://usememos.com/scratchpad)\n\n| Need | Scratchpad helps you |\n|------|----------------------|\n| Capture fast | Double-click to add notes |\n| Arrange freely | Drag cards around |\n| Add context | Attach files, links, and images |\n| Move around | Zoom and pan without setup |\n\n### Local-first\n\nYour Scratchpad cards stay in your browser. Memos does not access, sync, or store them.','\n',char(10)),'PUBLIC',0,'{"tags":["scratchpad"],"property":{"hasLink":true}}');
-- Memo Relations
INSERTINTOmemo_relationVALUES(6,1,'COMMENT');-- Alice comments on Welcome
@ -53,5 +53,10 @@ INSERT INTO reaction (id,creator_id,content_id,reaction_type) VALUES(10,2,'memos