Something went wrong. Try again.
Central platform for European atproto.<cc> country community websites atproto.eu
community atproto
Something went wrong. Try again.
TypeScript
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276import type { Lang } from '../i18n/ui';import type { Scope } from '../config/scopes';
export interface Tool { name: string; url: string; creator?: string; // handle or DID — resolved to the current handle/avatar at build time. // Prefer a DID for anyone who changes handles: it's the stable identity key. logo?: string; // overrides the favicon logoDark?: string; // dark-mode variant (when the logo needs one) logoLight?: boolean; // a mono/dark logo that needs a constant light chip (e.g. Tangled) description?: Record<Lang, string>; /** Makers' countries (ISO 3166-1 alpha-2, lowercase). A national site shows tools whose makers * are from that country; the .eu aggregate shows all. Defaults to ['nl'] when omitted. */ countries?: readonly string[];}
// AT Protocol tools made by people in the Netherlands. Guido adds more over time.// TODO: atstore.fyi ratings (atstore is an atproto-record app — needs its lexicon mapped).export const tools: Tool[] = [ { name: 'Sifa ID', url: 'https://sifa.id', creator: 'gui.do', logo: '/brand/sifa-light.svg', logoDark: '/brand/sifa-dark.svg', description: { en: 'Professional identity and career network on AT Protocol.', nl: 'Professionele identiteit en carrièrenetwerk op AT Protocol.', }, }, { name: 'Sill', url: 'https://sill.social', creator: 'tylerjfisher.com', description: { en: 'Surfaces the links that are popular with the people you follow.', nl: 'Laat zien welke links populair zijn bij de mensen die je volgt.', }, }, { name: 'BookHive', url: 'https://bookhive.buzz', creator: 'nickthesick.com', description: { en: 'Track and review the books you read.', nl: 'Houd bij welke boeken je leest en schrijf reviews.', }, }, { name: 'Kipclip', url: 'https://kipclip.com', creator: 'tijs.org', description: { en: 'A Pinboard-style bookmark manager; your saved links live in your own account.', nl: 'Een Pinboard-achtige bookmarkmanager; je opgeslagen links staan in je eigen account.', }, }, { name: 'Glean', url: 'https://glean.at/', creator: 'julien.rbrt.fr', logo: '/brand/glean.svg', description: { en: 'A social RSS reader: read your feeds and discover what your circle is reading.', nl: 'Een sociale RSS-reader: lees je feeds en ontdek wat je kring leest.', }, }, { name: 'Skywalker', url: 'https://play.google.com/store/apps/details?id=com.gmail.mfnboer.skywalker', creator: 'michelbestaat.thereforeiam.eu', logo: 'https://cdn.bsky.app/img/avatar/plain/did:plc:zzmeflm2wzrrgcaam6bw3kaf/bafkreiavble6qeoncyapi42qgtglq6qo2urcl33ifsxw5bzzxboazc5vti@jpeg', description: { en: 'A Bluesky client for Android.', nl: 'Een Bluesky-client voor Android.', }, }, { name: 'atproto (Qt/C++)', url: 'https://github.com/mfnboer/atproto', creator: 'michelbestaat.thereforeiam.eu', logoLight: true, description: { en: 'A Qt/C++ library for AT Protocol.', nl: 'Een Qt/C++-bibliotheek voor AT Protocol.', }, }, { name: '2048.social', url: 'https://2048.social/', creator: 'gui.do', logo: '/brand/2048-social.png', description: { en: '2048, but the tiles are people from the open social web. Merge your way up from the smallest account to the biggest.', nl: '2048, maar de tegels zijn mensen van het open sociale web. Werk je omhoog van het kleinste account naar het grootste.', }, }, { name: 'mojo-atproto-oauth', url: 'https://tangled.org/beardeddutchman.services/mojo-atproto-oauth', creator: 'did:plc:5rms2ebhdngu24hgsu3s2hqd', // @angrydutchman.online — DID, he changes handles logo: '/brand/tangled.svg', logoLight: true, description: { en: 'AT Protocol OAuth for the Perl Mojolicious framework.', nl: 'AT Protocol OAuth voor het Perl-framework Mojolicious.', }, }, { name: 'Roomy', url: 'https://roomy.space', creator: 'erlend.sh', countries: ['no'], description: { en: 'Group chat and shared spaces on AT Protocol.', nl: 'Groepschat en gedeelde ruimtes op AT Protocol.', }, }, { name: 'GrandPerspective for PDS', url: 'https://pixeline.be/pds-grandperspective/', creator: 'pixeline.be', countries: ['be'], description: { en: "A treemap of an AT Protocol repository: see where its bytes actually go.", nl: 'Een treemap van een AT Protocol-repository: zie waar de bytes echt naartoe gaan.', fr: "Une treemap d'un dépôt AT Protocol : voyez où vont réellement les octets.", }, }, { name: 'ATmentions', url: 'https://pixeline.be/projects/atmentions/', creator: 'pixeline.be', countries: ['be'], description: { en: 'Webmentions for the ATmosphere: a small widget showing how the network reacted to a page.', nl: 'Webmentions voor de ATmosphere: een klein widget dat toont hoe het netwerk op een pagina reageerde.', fr: "Des webmentions pour l'ATmosphère : un petit widget qui montre comment le réseau a réagi à une page.", }, }, { name: 'List Manager', url: 'https://pixeline.be/bluesky-list-manager/', creator: 'pixeline.be', countries: ['be'], description: { en: 'Curate Bluesky lists: insights and bulk tools to grow them, on any AT Protocol PDS.', nl: 'Beheer Bluesky-lijsten: inzichten en bulktools om ze te laten groeien, op elke AT Protocol-PDS.', fr: "Gérez vos listes Bluesky : analyses et outils groupés pour les développer, sur n'importe quel PDS AT Protocol.", }, },
// Tools and apps made elsewhere in Europe (flagged "Made in Europe" on portal.eurosky.tech), // whose makers' countries we can't confirm as NL/BE/NO. countries: [] keeps them off every // national grid and shows them only on the .eu aggregate. { name: 'atmo.rsvp', url: 'https://atmo.rsvp/', creator: 'flo-bit.dev', countries: [], description: { en: 'Create and RSVP to events on the open social web.', nl: 'Maak evenementen aan en meld je aan op het open sociale web.', }, }, { name: 'Flashes', url: 'https://www.flashes.blue/', creator: 'sebastian.eurosky.social', countries: [], description: { en: 'A photo and video app for Bluesky, with the familiar feed you already know how to use.', nl: 'Een foto- en video-app voor Bluesky, met de vertrouwde feed die je al kent.', }, }, { name: 'Skeets', url: 'https://www.skeetsapp.com/', creator: 'sebastian.eurosky.social', countries: [], description: { en: 'A native third-party Bluesky client for iOS and iPadOS.', nl: 'Een native Bluesky-client van derden voor iOS en iPadOS.', }, }, { name: 'Mu', url: 'https://mu.social/', creator: 'eurosky.social', countries: [], description: { en: 'A social app on AT Protocol for real conversation and proper fun.', nl: 'Een sociale app op AT Protocol voor echte gesprekken en plezier.', }, }, { name: 'Colibri', url: 'https://colibri.social/', creator: 'lou.gg', countries: [], description: { en: 'Open source community chat for groups big and small, built on AT Protocol.', nl: 'Open source communitychat voor groepen groot en klein, op AT Protocol.', }, }, { name: 'Currents', url: 'https://currents.is/', creator: 'matteomarjanovic.com', countries: [], description: { en: 'Save inspiration from anywhere and curate personalized visual feeds.', nl: 'Bewaar inspiratie van overal en stel persoonlijke visuele feeds samen.', }, }, { name: 'juttu', url: 'https://juttu.app/', creator: 'matteomarjanovic.com', countries: [], description: { en: 'A comment widget where every comment is a real Bluesky post, owned by your readers.', nl: 'Een reactiewidget waarbij elke reactie een echte Bluesky-post is, van je lezers zelf.', }, }, { name: 'Blento', url: 'https://blento.app/', creator: 'flo-bit.dev', countries: [], description: { en: 'Build your own website the fun way, on AT Protocol.', nl: 'Bouw je eigen website op een leuke manier, op AT Protocol.', }, }, { name: 'AtmoPay', url: 'https://atmopay.birdsongapps.com/', creator: 'sebastian.eurosky.social', countries: [], description: { en: 'Set your prices once; AtmoPay publishes them to your account and settles payments, so any app that reads your profile can sell for you.', nl: 'Stel je prijzen één keer in; AtmoPay publiceert ze naar je account en handelt betalingen af, zodat elke app die je profiel leest voor je kan verkopen.', }, }, { name: 'npmx', url: 'https://npmx.dev/', countries: [], description: { en: 'A fast, modern browser for the npm registry: search, browse and explore packages.', nl: 'Een snelle, moderne browser voor het npm-register: zoek en verken packages.', }, }, { name: 'Tangled', url: 'https://tangled.org/', logo: '/brand/tangled.svg', logoLight: true, countries: [], description: { en: 'A social Git collaboration platform built on AT Protocol, where you own your code. This site lives here.', nl: 'Een sociaal Git-samenwerkingsplatform op AT Protocol, waar je je eigen code bezit. Deze site staat hier.', }, },];
/** Tools to show for a build's scope: a national site shows tools whose makers are from its * country (tools default to ['nl'] when they omit `countries`); the .eu aggregate shows all. */export function toolsFor(scope: Scope): Tool[] { if (scope.aggregate) return tools; const cc = scope.countries === 'all' ? null : scope.countries[0]; return cc ? tools.filter((t) => (t.countries ?? ['nl']).includes(cc)) : [];}