Source
This app’s code and revision history are public. Download a copy or explore the files below.
Public
The app’s code and revision history are public.
Run it yourself
Take the whole tree and run it on your own machine. The download needs no account. Cloning needs a sign-in.
Download .zip
bounded clone 5af1a249bbbef1db1b4c5ec8
A copy you download is not bounded. The guarantees this app runs under - declared egress, proven invariants, writes that fail closed - live in the runtime serving this page, not in the files. What you get is auditable source you can read and run, with no runtime guarantees attached.
src/lib/services.ts
// Popular services for the name field's suggestions: each one's own website and category, and for
// some a typical US price from public pricing pages read in October 2026. A typical price is only a
// starting point: the form labels it "typical, check yours", because plans, countries and offers differ.
import type { Category, Unit } from "./subs";
export interface Service {
name: string;
url: string;
category: Category;
/** Typical US price in dollars, and how often it is charged. */
typical?: { usd: string; unit: Unit };
/** Other names people type for it. */
aka?: string[];
}
const s = (name: string, url: string, category: Category, typical?: [string, Unit], aka?: string[]): Service =>
({ name, url, category, ...(typical ? { typical: { usd: typical[0], unit: typical[1] } } : {}), ...(aka ? { aka } : {}) });
export const SERVICES: Service[] = [
// TV and video
s("Netflix", "https://www.netflix.com", "video"),
s("Disney+", "https://www.disneyplus.com", "video", undefined, ["Disney Plus"]),
s("Hulu", "https://www.hulu.com", "video"),
s("HBO Max", "https://www.hbomax.com", "video", undefined, ["Max"]),
s("Prime Video", "https://www.primevideo.com", "video", undefined, ["Amazon Prime Video"]),
s("Apple TV", "https://tv.apple.com", "video", undefined, ["Apple TV+"]),
s("Paramount+", "https://www.paramountplus.com", "video", undefined, ["Paramount Plus"]),
s("Peacock", "https://www.peacocktv.com", "video"),
s("YouTube Premium", "https://www.youtube.com/premium", "video"),
s("YouTube TV", "https://tv.youtube.com", "video"),
s("Crunchyroll", "https://www.crunchyroll.com", "video"),
s("Sling TV", "https://www.sling.com", "video"),
// Music and audio
s("Spotify", "https://www.spotify.com", "music", undefined, ["Spotify Premium"]),
s("Apple Music", "https://www.apple.com/apple-music/", "music"),
s("YouTube Music", "https://music.youtube.com", "music"),
s("Amazon Music Unlimited", "https://www.amazon.com/music/unlimited", "music"),
s("Tidal", "https://tidal.com", "music"),
s("SiriusXM", "https://www.siriusxm.com", "music"),
s("Pandora", "https://www.pandora.com", "music"),
s("Audible", "https://www.audible.com", "music"),
// Bundles, storage and software
s("Apple One", "https://www.apple.com/apple-one/", "software"),
s("iCloud+", "https://www.apple.com/icloud/", "storage", undefined, ["iCloud"]),
s("Google One", "https://one.google.com", "storage"),
s("Dropbox", "https://www.dropbox.com", "storage"),
s("Microsoft 365", "https://www.microsoft.com/microsoft-365", "software", undefined, ["Office 365"]),
s("Adobe Creative Cloud", "https://www.adobe.com/creativecloud.html", "software", undefined, ["Photoshop", "Lightroom"]),
s("Canva Pro", "https://www.canva.com", "software"),
s("Notion", "https://www.notion.com", "software"),
s("Evernote", "https://evernote.com", "software"),
s("Todoist", "https://www.todoist.com", "software", ["7", "month"]),
s("1Password", "https://1password.com", "software"),
s("NordVPN", "https://nordvpn.com", "software"),
s("ExpressVPN", "https://www.expressvpn.com", "software"),
s("Grammarly", "https://www.grammarly.com", "software"),
s("ChatGPT Plus", "https://chatgpt.com", "software", undefined, ["ChatGPT", "OpenAI"]),
s("Claude Pro", "https://claude.ai", "software", undefined, ["Claude"]),
s("Google AI Pro", "https://gemini.google.com", "software", undefined, ["Gemini"]),
s("Perplexity Pro", "https://www.perplexity.ai", "software", undefined, ["Perplexity"]),
s("Midjourney", "https://www.midjourney.com", "software"),
s("Rocket Money Premium", "https://www.rocketmoney.com", "money", undefined, ["Rocket Money", "Truebill"]),
// News and reading
s("The New York Times", "https://www.nytimes.com", "news", undefined, ["NYT", "New York Times"]),
s("The Washington Post", "https://www.washingtonpost.com", "news"),
s("The Wall Street Journal", "https://www.wsj.com", "news", undefined, ["WSJ"]),
s("The Economist", "https://www.economist.com", "news"),
s("Medium", "https://medium.com", "news"),
s("Apple News+", "https://www.apple.com/apple-news/", "news"),
s("Kindle Unlimited", "https://www.amazon.com/kindleunlimited", "news"),
// Games
s("Xbox Game Pass", "https://www.xbox.com/xbox-game-pass", "games"),
s("PlayStation Plus", "https://www.playstation.com/ps-plus/", "games", undefined, ["PS Plus"]),
s("Nintendo Switch Online", "https://www.nintendo.com/switch/online/", "games"),
s("Apple Arcade", "https://www.apple.com/apple-arcade/", "games"),
s("Discord Nitro", "https://discord.com/nitro", "games"),
// Health and fitness
s("Peloton", "https://www.onepeloton.com", "health"),
s("Strava", "https://www.strava.com", "health"),
s("MyFitnessPal", "https://www.myfitnesspal.com", "health"),
s("ClassPass", "https://classpass.com", "health"),
s("Calm", "https://www.calm.com", "health", ["69.99", "year"]),
s("Headspace", "https://www.headspace.com", "health", ["69.99", "year"]),
s("BetterSleep", "https://www.bettersleep.com", "health", ["9.99", "month"]),
s("Insight Timer", "https://insighttimer.com", "health", ["9.99", "month"]),
s("Noisli", "https://www.noisli.com", "health", ["12", "month"]),
s("Strong", "https://www.strong.app", "health", ["4.99", "month"]),
s("Hevy", "https://www.hevyapp.com", "health", ["2.99", "month"]),
s("JEFIT", "https://www.jefit.com", "health", ["12.99", "month"]),
s("Habitica", "https://habitica.com", "health", ["4.99", "month"]),
// Learning
s("Duolingo Super", "https://www.duolingo.com", "learning", ["12.99", "month"], ["Duolingo", "Super Duolingo", "Duolingo Max"]),
s("Babbel", "https://www.babbel.com", "learning", ["17.95", "month"]),
s("Busuu", "https://www.busuu.com", "learning"),
s("Rosetta Stone", "https://www.rosettastone.com", "learning", ["19.99", "month"]),
s("Memrise", "https://www.memrise.com", "learning", ["24.99", "month"]),
s("Quizlet Plus", "https://quizlet.com", "learning", ["7.99", "month"], ["Quizlet"]),
s("Brainscape", "https://www.brainscape.com", "learning"),
s("MasterClass", "https://www.masterclass.com", "learning"),
s("Coursera Plus", "https://www.coursera.org", "learning", undefined, ["Coursera"]),
s("Skillshare", "https://www.skillshare.com", "learning"),
s("LinkedIn Premium", "https://www.linkedin.com/premium", "work"),
// Food, shopping and memberships
s("Amazon Prime", "https://www.amazon.com/prime", "shopping", undefined, ["Prime"]),
s("Walmart+", "https://www.walmart.com/plus", "shopping", undefined, ["Walmart Plus"]),
s("Costco", "https://www.costco.com", "shopping"),
s("DashPass", "https://www.doordash.com/dashpass/", "food", undefined, ["DoorDash"]),
s("Uber One", "https://www.uber.com/us/en/u/uber-one/", "food"),
s("Instacart+", "https://www.instacart.com", "food", undefined, ["Instacart"]),
s("HelloFresh", "https://www.hellofresh.com", "food"),
// Money
s("YNAB", "https://www.ynab.com", "money", ["14.99", "month"], ["You Need A Budget"]),
s("Monarch Money", "https://www.monarch.com", "money", ["14.99", "month"], ["Monarch"]),
s("Copilot Money", "https://www.copilot.money", "money", ["13", "month"]),
s("Goodbudget", "https://goodbudget.com", "money", ["10", "month"]),
s("Splitwise Pro", "https://www.splitwise.com", "money", undefined, ["Splitwise"]),
// Work tools
s("Zoom", "https://zoom.us", "work", ["16.99", "month"], ["Zoom Pro"]),
s("Slack", "https://slack.com", "work"),
s("Trello", "https://trello.com", "work", ["6", "month"]),
s("Asana", "https://asana.com", "work", ["13.49", "month"]),
s("Miro", "https://miro.com", "work"),
s("Toggl Track", "https://toggl.com/track/", "work", ["12", "month"], ["Toggl"]),
s("Harvest", "https://www.getharvest.com", "work"),
s("WeTransfer", "https://wetransfer.com", "work"),
s("DocuSign", "https://www.docusign.com", "work", ["132", "year"]),
s("Dropbox Sign", "https://sign.dropbox.com", "work", ["15", "month"], ["HelloSign"]),
s("PandaDoc", "https://www.pandadoc.com", "work", ["228", "year"]),
s("Typeform", "https://www.typeform.com", "work", ["39", "month"]),
s("Jotform", "https://www.jotform.com", "work", ["39", "month"]),
s("SurveyMonkey", "https://www.surveymonkey.com", "work"),
s("Calendly", "https://calendly.com", "work"),
s("Doodle", "https://doodle.com", "work"),
s("Bitly", "https://bitly.com", "work", ["120", "year"]),
s("Rebrandly", "https://www.rebrandly.com", "work", ["11", "month"]),
s("Linktree", "https://linktr.ee", "work"),
s("Beacons", "https://beacons.ai", "work"),
s("Smallpdf", "https://smallpdf.com", "work"),
s("iLovePDF", "https://www.ilovepdf.com", "work"),
s("Adobe Acrobat", "https://www.adobe.com/acrobat.html", "work", undefined, ["Acrobat Pro"]),
s("FreshBooks", "https://www.freshbooks.com", "work"),
s("Invoice Simple", "https://www.invoicesimple.com", "work", ["6.99", "month"]),
s("Wispr Flow", "https://wisprflow.ai", "work", ["15", "month"]),
s("Otter.ai", "https://otter.ai", "work", undefined, ["Otter"]),
s("Loom", "https://www.loom.com", "work", ["18", "month"]),
s("TinyPNG", "https://tinypng.com", "work"),
s("remove.bg", "https://www.remove.bg", "work", undefined, ["removebg"]),
s("Zety", "https://zety.com", "work"),
s("Resume.io", "https://resume.io", "work"),
s("SignUpGenius", "https://www.signupgenius.com", "work"),
s("Pastebin Pro", "https://pastebin.com", "work", undefined, ["Pastebin"]),
s("Slido", "https://www.slido.com", "work"),
s("Mentimeter", "https://www.mentimeter.com", "work"),
s("Kahoot", "https://kahoot.com", "work", undefined, ["Kahoot!"]),
// Family
s("Huckleberry", "https://huckleberrycare.com", "family"),
s("Glow Baby", "https://glowing.com", "family", ["59.99", "year"]),
s("Nanit", "https://www.nanit.com", "family", undefined, ["Nanit Insights"]),
];
const norm = (t: string) => t.toLowerCase().replace(/[^a-z0-9]+/g, " ").trim();
/** Services whose name (or other name) starts with, or has a word starting with, what was typed. */
export function suggest(typed: string, limit = 8): Service[] {
const q = norm(typed);
if (!q) return [];
const score = (sv: Service) => {
let best = 9;
for (const n of [sv.name, ...(sv.aka || [])].map(norm)) {
if (n === q) best = Math.min(best, 0);
else if (n.startsWith(q)) best = Math.min(best, 1);
else if (` ${n}`.includes(` ${q}`)) best = Math.min(best, 2);
}
return best;
};
return SERVICES.map((sv) => ({ sv, k: score(sv) }))
.filter((x) => x.k < 9)
.sort((a, b) => a.k - b.k || a.sv.name.localeCompare(b.sv.name))
.slice(0, limit)
.map((x) => x.sv);
}
/** The listed service with exactly this name (or other name), if any. */
export function serviceNamed(name: string): Service | undefined {
const q = norm(name);
return q ? SERVICES.find((sv) => [sv.name, ...(sv.aka || [])].some((n) => norm(n) === q)) : undefined;
}
Change history
Point store links to openapps.free
Bind agent address in policy
Use OpenApps service URLs and add contribution strip
Bounded source sync
Bounded source sync
Bounded source sync