commits
- Added Sentry dependencies for Astro and Cloudflare in package.json.
- Created sentry.client.config.js to initialize Sentry for client-side error tracking.
- Created sentry.server.config.js to initialize Sentry for server-side error tracking.
Brings docstring coverage from ~33% to well above the 80% threshold.
Every exported and non-trivial internal function now has a /** */ docstring
describing its contract, not just its name.
Files updated:
- src/utils/bluesky-api.ts — all 9 functions (fetchWithTimeout, fetchProfile,
resolveHandle, fetchPost, extractPostId, truncateText, fetchVideoPosts,
toAbsoluteUrl, getImageMimeType) + 2 export interfaces
- src/utils/richtext.ts — escapeHtml, parseRichText, parseRichTextTruncated
- src/utils/video-ambient-backdrop.ts — oklchToCss, normalizeHue,
getVideoAmbientBackdropGradientColors, hashVideoAmbientBackdropSeed,
getVideoAmbientBackdropInlineStyle
- src/utils/orbyt-api.ts — ColorData, OrbytApiBinding, getColor
- src/utils/ios-distribution.ts — normalizeCountryCode, isAltstorePalRegion,
getIosDownloadOptions, getIosDownloadOptionsFromRequest, iosHrefForOptions
- src/utils/profile-colors.ts — getRelativeLuminance, blendColors
- src/middleware.ts — matchAcceptLanguage, onRequest (full detection-order docs)
- src/i18n/utils.ts — isValidLocale, useTranslations, localeToHtmlLang,
getLocaleUrl, hreflangLinks
- src/actions/index.ts — loadMorePosts
https://claude.ai/code/session_01Ek5Qwg11ePJwKdeS1x6LwS
Spanish architecture overhaul:
- es-419.json is now the authoritative 66-string neutral Latin American
Spanish base ("español neutro") — descarga, volver, agregar, video
- es-MX.json slimmed to 6 Mexican-specific overrides that fall back to
es-419: obtén/obtener for app CTAs, regresar for back navigation
- Fallback chain flipped: es-MX → es-419 → en (was es-419 → es-MX → en)
so Mexican vocabulary sits on top of the neutral LA base, not the other
way around
Add Italian (it):
- Full 66-string translation; scarica l'app, indietro, contattaci, etc.
- Geo overrides: Switzerland (CH → ch), San Marino (SM → sm)
Add Turkish (tr):
- Full 66-string translation; uygulamayı indir, geri dön, bize ulaşın, etc.
- Geo overrides: Cyprus (CY → cy), Azerbaijan (AZ → az)
https://claude.ai/code/session_01Ek5Qwg11ePJwKdeS1x6LwS
Every locale now shows the visitor's own country flag via LOCALE_GEO_FLAGS,
replacing the English-only ENGLISH_COUNTRY_FLAG_MAP:
- es-419: all 19 Latin American Spanish-speaking countries (CO, CL, PE, VE,
EC, GT, CU, BO, DO, HN, PY, SV, NI, CR, PA, UY, PR, MX, GQ) each see
their own flag instead of Argentina's by default
- de: Austrians (AT), Swiss (CH), Liechtensteiners (LI), Belgian/Luxembourgish
German speakers (BE, LU) see their own flags
- fr: 30 French-speaking countries covered — Belgium, Switzerland, Canada,
Monaco, Haiti, and 25 African nations (Senegal, Côte d'Ivoire, Cameroon,
DR Congo, Mali, Burkina Faso, Morocco, Tunisia, Algeria, and more)
- pt-BR: Portugal (PT), Angola (AO), Mozambique (MZ), Cape Verde (CV),
Guinea-Bissau (GW), São Tomé (ST), Timor-Leste (TL), Macau (MO)
- en: expanded to 40+ countries including Nigeria, Ghana, Kenya, Tanzania,
Uganda, Ethiopia, Zimbabwe, Pakistan, Bangladesh, Sri Lanka, Malaysia,
Hong Kong, Jamaica, Trinidad, Fiji, Papua New Guinea, and more
93 new flag SVGs from hampusborgos/country-flags added to /public/flags/
https://claude.ai/code/session_01Ek5Qwg11ePJwKdeS1x6LwS
- Add es-ES (Spanish Spain) locale with full translation — uses Spain-specific
vocabulary (vídeo, consigue, volver, informe de errores, añadir)
- Replace emoji flags in LanguageSwitcher with SVG images from hampusborgos/
country-flags, stored as static assets in /public/flags/
- Geo-aware flag for English: reads CF-IPCountry via Cloudflare runtime cf object
(falls back to CF-IPCountry header) and shows the visitor's country flag when
on the English locale — e.g. British users see the Union Jack, Australians see
the Australian flag, defaulting to the US flag otherwise
- Add getFlagCountryCode() helper in i18n/utils.ts with ENGLISH_COUNTRY_FLAG_MAP
(GB, AU, CA, IE, NZ, ZA, IN, SG, PH) and LOCALE_FLAG_COUNTRY per locale
- Thread countryCode through middleware → App.Locals → pages → SiteFooter →
LanguageSwitcher
- Exclude /flags/* from Cloudflare Worker routing so SVGs are served as static
assets directly
https://claude.ai/code/session_01Ek5Qwg11ePJwKdeS1x6LwS
- Added language switcher component for user locale selection.
- Integrated translations for English, German, Spanish (MX and LA), French, Japanese, Korean, and Portuguese (BR).
- Updated pages (app, contact, index, privacy, terms) to utilize translations for titles, subtitles, and other text elements.
- Modified middleware to handle locale detection from cookies and Accept-Language header.
- Adjusted HTML lang attributes dynamically based on user locale.
- Set prerender to false for pages to support dynamic content based on locale.
Add AltStore admin dashboard and release management system
- Added Klee One font fetching script to package.json.
- Integrated Klee One and Caveat fonts in app and index pages for enhanced typography.
- Updated CSS in altstore-pal-peek to utilize both Klee One and Caveat fonts for better visual appeal.
- Renamed text in AltstorePalPeek component for improved clarity.
- Removed AltstorePalTouchHint component as it was no longer needed.
- Adjusted layout and styles in app and index pages to enhance user experience.
- Updated CSS for AltstorePalPeek to improve responsiveness and visual consistency.
- Added dynamic handling for AltStore download options in both app and index pages.
- Introduced new components for AltStore hints and adjusted button layout for better visibility.
- Updated styles for download buttons and wrappers to improve user experience.
- Changed prerender settings to false for both pages to accommodate dynamic content.
This reverts commit 6ea5faa526719dc06839f65bcb6d810e116c061d.
- source.json is now served dynamically from R2 (no redeploy needed to publish releases)
- POST /api/admin/altstore/release publishes a new version (bearer token or session cookie auth)
- GET /admin/altstore is a protected admin UI: shows current release, publish form, verify/federate buttons
- altstore-r2.sh gains a `release` command that uploads ADP to R2 then calls the admin API in one step
- astro.config.mjs updated to route /altstore/source.json, /api/admin/*, /admin/* through the Worker
Setup required: run `wrangler secret put ADMIN_SECRET` then open /admin/altstore?token=<secret>
https://claude.ai/code/session_01RFjX945cF6zS1xdEJAEDM3
- Change the color of the empty feed message to use a color-mix function for better integration with profile theme colors.
- Update getColor function to handle optional binding parameter for better flexibility.
- Enhance error handling and add multiple fetch targets, including local development and production APIs.
- Simplify color data retrieval process by iterating through potential fetch sources.
- Change the caption color in the post overlay to var(--orbyt-white) for better contrast and visibility.
- Introduce scrollbar-gutter property to the body element to enhance layout stability and prevent content shifting during scrolling.
- Add media query adjustments to the site footer for screens up to 640px.
- Implement padding, margin, and layout changes to improve spacing and alignment of footer elements on smaller screens.
- Introduce padding-top of 2.5rem to the site footer for better visual separation and layout consistency.
- Delete ExternalServiceRedirectPage component and its usage in the iOS and Discord pages.
- Update sitemap to remove the Discord page from the routing structure.
- Clean up astro.config.mjs by removing the iOS redirect configuration.
- Add new props for auto redirect delay, manual link label, and iTunes app ID/argument.
- Update redirect logic to support a customizable delay before navigating to the destination.
- Modify iOS page to utilize new props for improved user experience and App Store linking.
- Replace min-height with 100dvh for better responsiveness in 404.astro and app.astro.
- Change body display to grid and center content using place-items for improved layout consistency.
- Remove unnecessary flex properties from container elements to streamline styling.
- Update all instances of the iOS download link to use lowercase "/ios" for consistency across the application.
- Introduce a redirect in the configuration to handle requests to "/iOS" and redirect them to "/ios".
- Eliminate the display property for the qr-section on touch devices to enhance mobile responsiveness and improve user experience.
- Change download button links in multiple pages (index.astro, app.astro, @[handle].astro, and @[handle]/[postId].astro) from the App Store URL to the new iOS page for consistency and easier navigation.
- Update the Android download button link in app.astro and index.astro to use lowercase for consistency.
- Replace references to the beta page with the new Android page in README and sitemap.
- Update download button links in index.astro and app.astro to point to the Android page.
- Remove the beta.astro file as part of the transition to the Android page.
Brings docstring coverage from ~33% to well above the 80% threshold.
Every exported and non-trivial internal function now has a /** */ docstring
describing its contract, not just its name.
Files updated:
- src/utils/bluesky-api.ts — all 9 functions (fetchWithTimeout, fetchProfile,
resolveHandle, fetchPost, extractPostId, truncateText, fetchVideoPosts,
toAbsoluteUrl, getImageMimeType) + 2 export interfaces
- src/utils/richtext.ts — escapeHtml, parseRichText, parseRichTextTruncated
- src/utils/video-ambient-backdrop.ts — oklchToCss, normalizeHue,
getVideoAmbientBackdropGradientColors, hashVideoAmbientBackdropSeed,
getVideoAmbientBackdropInlineStyle
- src/utils/orbyt-api.ts — ColorData, OrbytApiBinding, getColor
- src/utils/ios-distribution.ts — normalizeCountryCode, isAltstorePalRegion,
getIosDownloadOptions, getIosDownloadOptionsFromRequest, iosHrefForOptions
- src/utils/profile-colors.ts — getRelativeLuminance, blendColors
- src/middleware.ts — matchAcceptLanguage, onRequest (full detection-order docs)
- src/i18n/utils.ts — isValidLocale, useTranslations, localeToHtmlLang,
getLocaleUrl, hreflangLinks
- src/actions/index.ts — loadMorePosts
https://claude.ai/code/session_01Ek5Qwg11ePJwKdeS1x6LwS
Spanish architecture overhaul:
- es-419.json is now the authoritative 66-string neutral Latin American
Spanish base ("español neutro") — descarga, volver, agregar, video
- es-MX.json slimmed to 6 Mexican-specific overrides that fall back to
es-419: obtén/obtener for app CTAs, regresar for back navigation
- Fallback chain flipped: es-MX → es-419 → en (was es-419 → es-MX → en)
so Mexican vocabulary sits on top of the neutral LA base, not the other
way around
Add Italian (it):
- Full 66-string translation; scarica l'app, indietro, contattaci, etc.
- Geo overrides: Switzerland (CH → ch), San Marino (SM → sm)
Add Turkish (tr):
- Full 66-string translation; uygulamayı indir, geri dön, bize ulaşın, etc.
- Geo overrides: Cyprus (CY → cy), Azerbaijan (AZ → az)
https://claude.ai/code/session_01Ek5Qwg11ePJwKdeS1x6LwS
Every locale now shows the visitor's own country flag via LOCALE_GEO_FLAGS,
replacing the English-only ENGLISH_COUNTRY_FLAG_MAP:
- es-419: all 19 Latin American Spanish-speaking countries (CO, CL, PE, VE,
EC, GT, CU, BO, DO, HN, PY, SV, NI, CR, PA, UY, PR, MX, GQ) each see
their own flag instead of Argentina's by default
- de: Austrians (AT), Swiss (CH), Liechtensteiners (LI), Belgian/Luxembourgish
German speakers (BE, LU) see their own flags
- fr: 30 French-speaking countries covered — Belgium, Switzerland, Canada,
Monaco, Haiti, and 25 African nations (Senegal, Côte d'Ivoire, Cameroon,
DR Congo, Mali, Burkina Faso, Morocco, Tunisia, Algeria, and more)
- pt-BR: Portugal (PT), Angola (AO), Mozambique (MZ), Cape Verde (CV),
Guinea-Bissau (GW), São Tomé (ST), Timor-Leste (TL), Macau (MO)
- en: expanded to 40+ countries including Nigeria, Ghana, Kenya, Tanzania,
Uganda, Ethiopia, Zimbabwe, Pakistan, Bangladesh, Sri Lanka, Malaysia,
Hong Kong, Jamaica, Trinidad, Fiji, Papua New Guinea, and more
93 new flag SVGs from hampusborgos/country-flags added to /public/flags/
https://claude.ai/code/session_01Ek5Qwg11ePJwKdeS1x6LwS
- Add es-ES (Spanish Spain) locale with full translation — uses Spain-specific
vocabulary (vídeo, consigue, volver, informe de errores, añadir)
- Replace emoji flags in LanguageSwitcher with SVG images from hampusborgos/
country-flags, stored as static assets in /public/flags/
- Geo-aware flag for English: reads CF-IPCountry via Cloudflare runtime cf object
(falls back to CF-IPCountry header) and shows the visitor's country flag when
on the English locale — e.g. British users see the Union Jack, Australians see
the Australian flag, defaulting to the US flag otherwise
- Add getFlagCountryCode() helper in i18n/utils.ts with ENGLISH_COUNTRY_FLAG_MAP
(GB, AU, CA, IE, NZ, ZA, IN, SG, PH) and LOCALE_FLAG_COUNTRY per locale
- Thread countryCode through middleware → App.Locals → pages → SiteFooter →
LanguageSwitcher
- Exclude /flags/* from Cloudflare Worker routing so SVGs are served as static
assets directly
https://claude.ai/code/session_01Ek5Qwg11ePJwKdeS1x6LwS
- Added language switcher component for user locale selection.
- Integrated translations for English, German, Spanish (MX and LA), French, Japanese, Korean, and Portuguese (BR).
- Updated pages (app, contact, index, privacy, terms) to utilize translations for titles, subtitles, and other text elements.
- Modified middleware to handle locale detection from cookies and Accept-Language header.
- Adjusted HTML lang attributes dynamically based on user locale.
- Set prerender to false for pages to support dynamic content based on locale.
- Added dynamic handling for AltStore download options in both app and index pages.
- Introduced new components for AltStore hints and adjusted button layout for better visibility.
- Updated styles for download buttons and wrappers to improve user experience.
- Changed prerender settings to false for both pages to accommodate dynamic content.
- source.json is now served dynamically from R2 (no redeploy needed to publish releases)
- POST /api/admin/altstore/release publishes a new version (bearer token or session cookie auth)
- GET /admin/altstore is a protected admin UI: shows current release, publish form, verify/federate buttons
- altstore-r2.sh gains a `release` command that uploads ADP to R2 then calls the admin API in one step
- astro.config.mjs updated to route /altstore/source.json, /api/admin/*, /admin/* through the Worker
Setup required: run `wrangler secret put ADMIN_SECRET` then open /admin/altstore?token=<secret>
https://claude.ai/code/session_01RFjX945cF6zS1xdEJAEDM3