Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitleaksignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# The IndexNow key is public by design: getpluck.io serves it at /<key>.txt so search engines can check it.
7fb5835fe5f68d5451a9302c21d41d3d7111331a:apps/web/lib/indexnow.ts:generic-api-key:11
2 changes: 1 addition & 1 deletion apps/web/lib/indexnow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { localePath } from "./siteUrls";
// IndexNow (indexnow.org): a new post is announced to Bing (and Yandex, Seznam, Naver) in all ten languages as soon
// as it is out, instead of waiting for a crawl. Only getpluck.io announces; the protocol checks the key against the
// file of the same name at the site's root (public/<key>.txt).
export const INDEXNOW_KEY = "2a2940bd0ceed62a1fd5c0a15b0b5836";
export const INDEXNOW_KEY = "2a2940bd0ceed62a1fd5c0a15b0b5836"; // gitleaks:allow (public by design)
const HOSTED = "https://getpluck.io";
// A post counts as new for three days from its date, and its claim lasts seven (meta's expiry), so it goes once.
const NEW_FOR_MS = 3 * 86_400_000;
Expand Down
48 changes: 27 additions & 21 deletions docs/handover/design/AppStore1.dc.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,40 +2,46 @@
<html lang="en">
<head>
<meta charset="utf-8">
<title>App Store · Pluck it from any app</title>
<title>App Store · Pluck it from any app.</title>
<script src="./support.js"></script>
</head>
<body>
<x-dc>
<helmet>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Fredoka:wght@700&amp;family=Geist:wght@400;500;600;700&amp;family=Source+Serif+4:opsz,wght@8..60,400;8..60,600&amp;display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Fredoka:wght@700&amp;family=Geist:wght@400;500;600;700&amp;family=Geist+Mono:wght@400&amp;family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,600;1,8..60,400&amp;display=swap">
<style>body{margin:0}</style>
</helmet>
<div style="position: relative; width: 1320px; height: 2868px; overflow: hidden; background: #1E5C45; color: #F6F8F4; font-family: 'Geist', ui-sans-serif, system-ui, sans-serif">
<div style="position: absolute; left: 96px; right: 96px; top: 150px; display: flex; flex-direction: column; gap: 32px">
<h1 style="margin: 0; font-family: 'Fredoka', 'Geist', sans-serif; font-weight: 700; font-size: 118px; line-height: 1.02; letter-spacing: -0.03em; text-wrap: balance">Pluck it from any app<span style="color: #7FD3AE">.</span></h1>
<p style="margin: 0; font-size: 46px; line-height: 60px; color: #CFE0D6; text-wrap: balance">One tap in the share sheet. The app never opens.</p>
<div style="position: absolute; left: 96px; right: 96px; top: 140px; display: flex; flex-direction: column; gap: 30px">
<h1 style="margin: 0; font-family: 'Fredoka', 'Geist', sans-serif; font-weight: 700; font-size: 124px; line-height: 1; letter-spacing: -0.03em; text-wrap: balance">Pluck it from any app<span style="color: #7FD3AE">.</span></h1>
<p style="margin: 0; font-size: 48px; line-height: 62px; color: #CFE0D6; text-wrap: balance">One tap in Share. The app stays shut.</p>
<div style="display: flex; gap: 14px; margin-top: 6px"><span style="height: 64px; padding: 0 26px; border-radius: 32px; border: 2px solid rgba(246, 248, 244, 0.35); display: inline-flex; align-items: center; font-size: 34px; color: #F6F8F4">Free</span><span style="height: 64px; padding: 0 26px; border-radius: 32px; border: 2px solid rgba(246, 248, 244, 0.35); display: inline-flex; align-items: center; font-size: 34px; color: #F6F8F4">Open source</span><span style="height: 64px; padding: 0 26px; border-radius: 32px; border: 2px solid rgba(246, 248, 244, 0.35); display: inline-flex; align-items: center; font-size: 34px; color: #F6F8F4">No ads</span></div>
</div>
<div style="position: absolute; left: 96px; top: 640px; width: 1128px; height: 2385px; box-sizing: border-box; padding: 24px; border-radius: 170px; background: #151A13">
<div style="width: 1080px; height: 2337px; border-radius: 146px; overflow: hidden; background: #F6F8F4; position: relative">
<div style="position: absolute; left: 0; top: 0; width: 390px; height: 844px; transform: scale(2.7692); transform-origin: 0 0"><div style="width: 390px; height: 844px; position: relative; background: #FFFFFF; overflow: hidden; font-family: 'Geist', ui-sans-serif, system-ui, sans-serif; color: #151A13">
<div style="padding: 54px 20px 0; display: flex; flex-direction: column; gap: 14px">
<div style="height: 40px; border-radius: 12px; background: #EEF0EC; display: flex; align-items: center; justify-content: center; font-size: 14px">modelcontextprotocol.io</div>
<span style="font-size: 13px; color: #525A4E; margin-top: 8px">Guides · 12 min</span>
<b style="font-family: 'Source Serif 4', Georgia, serif; font-size: 30px; line-height: 35px; font-weight: 600">How MCP auth actually works</b>
<p style="margin: 0; font-family: 'Source Serif 4', Georgia, serif; font-size: 17px; line-height: 27px">The short version is simple. The client never hands the server a password. It gets a token, scoped to what the user agreed to, and sends it with each call.</p>
<div style="position: absolute; left: 96px; top: 760px; width: 1128px; height: 2385px; box-sizing: border-box; padding: 24px; border-radius: 170px; background: #151A13">
<div style="width: 1080px; height: 2337px; border-radius: 146px; overflow: hidden; position: relative">
<div style="position: absolute; left: 0; top: 0; width: 390px; height: 844px; transform: scale(2.7692); transform-origin: 0 0"><div style="position: relative; width: 390px; height: 844px; overflow: hidden; background: #FFFFFF; font-family: 'Geist', ui-sans-serif, sans-serif; color: #151A13"><div style="height: 54px; display: flex; align-items: center; justify-content: space-between; padding: 6px 32px 0 40px; font-weight: 600; font-size: 16px; color: #151A13"><span>9:41</span><span style="display: flex; gap: 6px; align-items: center"><svg width="18" height="12" viewBox="0 0 18 12"><path d="M1 11h2V8H1zM5 11h2V6H5zM9 11h2V3H9zM13 11h2V1h-2z" fill="#151A13"/></svg><svg width="26" height="13" viewBox="0 0 26 13"><rect x="0.5" y="0.5" width="22" height="12" rx="3.5" fill="none" stroke="#151A13" opacity="0.4"/><rect x="2" y="2" width="17" height="9" rx="2" fill="#151A13"/></svg></span></div>
<div style="padding: 4px 20px 0; display: flex; flex-direction: column; gap: 14px">
<div style="height: 40px; border-radius: 12px; background: #EEF0EC; display: flex; align-items: center; justify-content: center; font-size: 14px">Weeknight bowls</div>
<svg width="350" height="180" viewBox="0 0 350 180" style="border-radius: 12px; display: block"><rect width="350" height="180" fill="#E9DCCB"/><rect y="128" width="350" height="52" fill="#DCCBB6"/>
<ellipse cx="175" cy="132" rx="118" ry="26" fill="#C9B79F"/>
<path d="M62 92h226c-6 40-52 62-113 62S68 132 62 92z" fill="#F6F8F4"/><ellipse cx="175" cy="92" rx="113" ry="30" fill="#F6F8F4"/>
<ellipse cx="175" cy="94" rx="100" ry="24" fill="#B8561F"/>
<path d="M95 92c14-12 28 10 42-2s28 10 42-2 28 10 42-2 22 6 30 2M100 101c14-10 30 8 44-2s28 8 42-2 28 8 42-2 14 4 20 2M112 84c12-8 26 8 38-1s26 8 38-1 24 8 36 0" fill="none" stroke="#F1DCA0" stroke-width="5" stroke-linecap="round"/>
<g fill="#7A1F10"><circle cx="120" cy="96" r="2.2"/><circle cx="160" cy="88" r="2"/><circle cx="198" cy="99" r="2.4"/><circle cx="232" cy="90" r="2"/><circle cx="145" cy="104" r="1.8"/><circle cx="215" cy="84" r="1.8"/></g>
<g fill="none" stroke="#34A07C" stroke-width="3.2" stroke-linecap="round"><path d="M138 86l5-3"/><path d="M182 104l6-1"/><path d="M226 98l4 4"/><path d="M168 80l2 5"/></g>
<path d="M232 20L196 98M252 24L208 100" stroke="#3B2A1C" stroke-width="5" stroke-linecap="round"/></svg>
<b style="font-family: 'Source Serif 4', Georgia, serif; font-size: 28px; line-height: 33px; font-weight: 600">15-minute chilli oil noodles</b>
<p style="font-family: 'Source Serif 4', Georgia, serif; font-size: 17px; line-height: 27px; margin: 0">Boil the noodles. While they cook, pour hot oil over garlic, chilli flakes and sesame.</p>
</div>
<div style="position: absolute; inset: 0; background: rgba(21,26,19,0.32)"></div>
<div style="position: absolute; left: 0; right: 0; bottom: 0; padding: 10px 20px 34px; border-radius: 26px 26px 0 0; background: #F6F8F4; display: flex; flex-direction: column; gap: 18px">
<div style="position: absolute; inset: 0; background: rgba(21, 26, 19, 0.32)"></div>
<div style="position: absolute; left: 0; right: 0; bottom: 0; padding: 10px 20px 118px; border-radius: 26px 26px 0 0; background: #F6F8F4; display: flex; flex-direction: column; gap: 18px">
<span style="align-self: center; width: 36px; height: 5px; border-radius: 3px; background: #CDD3C7"></span>
<div style="display: flex; gap: 14px; align-items: center"><span style="width: 44px; height: 44px; border-radius: 22px; background: #7FD3AE; display: flex; align-items: center; justify-content: center"><svg width="20" height="20" viewBox="0 0 16 16"><path d="M3.5 8.5l3 3 6-7" fill="none" stroke="#151A13" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"></path></svg></span><span style="display: flex; flex-direction: column"><b style="font-size: 24px; line-height: 28px; font-weight: 700; letter-spacing: -0.02em">Plucked.</b><span style="font-size: 15px; color: #525A4E">How MCP auth actually works</span></span></div>
<div style="display: flex; flex-direction: column; gap: 8px"><span style="font-size: 13px; color: #525A4E">Tags and list</span>
<div style="display: flex; flex-wrap: wrap; gap: 8px"><span style="height: 36px; padding: 0 14px; border-radius: 18px; background: #1E5C45; color: #F6F8F4; display: flex; align-items: center; font-size: 15px">mcp</span><span style="height: 36px; padding: 0 14px; border-radius: 18px; background: #E3E8DE; display: flex; align-items: center; font-size: 15px">postgres</span><span style="height: 36px; padding: 0 14px; border-radius: 18px; border: 1px dashed #9AA392; display: flex; align-items: center; font-size: 15px">+ Best MCP reading</span></div></div>
<div style="display: flex; gap: 14px; align-items: center"><span style="width: 44px; height: 44px; border-radius: 22px; background: #7FD3AE; display: flex; align-items: center; justify-content: center"><svg width="20" height="20" viewBox="0 0 16 16"><path d="M3.5 8.5l3 3 6-7" fill="none" stroke="#151A13" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"/></svg></span><span style="display: flex; flex-direction: column"><b style="font-size: 24px; line-height: 28px; font-weight: 700; letter-spacing: -0.02em">Plucked.</b><span style="font-size: 15px; color: #525A4E">15-minute chilli oil noodles</span></span></div>
<div style="display: flex; flex-direction: column; gap: 8px"><span style="font-size: 13px; color: #525A4E">Tags and list</span><div style="display: flex; flex-wrap: wrap; gap: 8px"><span style="height: 36px; padding: 0 14px; border-radius: 18px; display: inline-flex; align-items: center; font-size: 15px; background: #1E5C45; color: #F6F8F4">recipes</span><span style="height: 36px; padding: 0 14px; border-radius: 18px; display: inline-flex; align-items: center; font-size: 15px; background: #E3E8DE">weeknight</span><span style="height: 36px; padding: 0 14px; border-radius: 18px; border: 1px dashed #9AA392; display: flex; align-items: center; font-size: 15px">+ Dinners to try</span></div></div>
<div style="height: 46px; border-radius: 12px; background: #FFFFFF; border: 1px solid #D3D9CE; display: flex; align-items: center; padding: 0 14px; color: #525A4E; font-size: 15px">Add a note</div>
<div style="height: 50px; border-radius: 12px; background: #1E5C45; color: #F6F8F4; display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 16px">Done</div>
</div>
</div></div>
<div style="position: absolute; left: 50%; top: 32px; width: 300px; height: 88px; margin-left: -150px; border-radius: 44px; background: #151A13"></div>
</div></div></div>
<div style="position: absolute; left: 50%; top: 32px; width: 300px; height: 88px; margin-left: -150px; border-radius: 44px; background: #0B0D0A"></div>
</div>
</div>
</div>
Expand Down
Loading
Loading