Commit Graph

860 Commits

Author SHA1 Message Date
Sat Naing e0506cb41e feat: add callout support (#655)
* feat: toggle .dark class on theme change

* feat: add callouts with rehype-callouts plugin

* docs: update blog posts with callouts
2026-06-06 09:09:08 +07:00
kOaDT 98f15ee3bc feat: add accessible image lightbox for post images (#654)
* feat: add accessible image lightbox for post images

* fix: iOS scroll lock, backdrop blur, dvh image sizing for lightbox

* feat: add vanilla pinch-to-zoom to image lightbox

* fix: improve touch event handling and scaling logic in image lightbox

---------

Co-authored-by: satnaing <satnaingdev@gmail.com>
2026-06-06 09:08:21 +07:00
Sat Naing 38c4f39fde chore: add recommended VSCode extensions for AstroPaper (#653) 2026-06-03 08:46:32 +07:00
せいはな 470bfb528e fix: sanitize post title for valid CSS view-transition-name (#650) 2026-06-02 22:05:23 +07:00
cfresco-fb e062c79248 fix: iterate all weight matches in getFontPathByWeight (#645)
* fix: iterate all weight matches in getFontPathByWeight

When fontData has multiple entries for the same weight with different format sets, Array.find() stops at the first match even if that entry does not contain the requested format. The fix uses a for...of loop that returns only when both weight AND format match. 

* fix: add fallback to first src entry and trailing newline

- Use `?? font.src[0]` as fallback when no src entry matches the
  requested format, as suggested in code review
- Add missing trailing newline at end of file

Fixes #644
2026-06-02 21:47:12 +07:00
Sat Naing ca42b6b218 build(deps): bump astro and other dependencies (#651)
* build(deps): bump astro and its related dependencies

* build(deps): bump dependencies to latest versions
2026-06-02 08:22:00 +07:00
Erison Silva 1329c6082d build: use pnpm official Docker image and update CI/Docker setup (#639)
- Replace docker-compose.yml (node:lts) with compose.yaml (ghcr.io/pnpm/pnpm:11.3.0)
  - Bump pnpm to 11.3.0 and add --frozen-lockfile in CI
  - Add pnpm-workspace.yaml to allow esbuild and sharp builds
  - Update .gitignore for pnpm store and compose override file
2026-05-29 20:48:05 +07:00
Orancat 68b452289a fix: update incorrect RSS link (#649) 2026-05-29 08:54:17 +07:00
dependabot[bot] 3dd4bd54da build(deps): bump fast-xml-builder from 1.1.5 to 1.2.0 (#643)
Bumps [fast-xml-builder](https://github.com/NaturalIntelligence/fast-xml-builder) from 1.1.5 to 1.2.0.
- [Changelog](https://github.com/NaturalIntelligence/fast-xml-builder/blob/main/CHANGELOG.md)
- [Commits](https://github.com/NaturalIntelligence/fast-xml-builder/compare/v1.1.5...v1.2.0)

---
updated-dependencies:
- dependency-name: fast-xml-builder
  dependency-version: 1.2.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-22 18:23:38 +07:00
dependabot[bot] a4e3b84318 build(deps): bump devalue from 5.7.1 to 5.8.1 (#638)
Bumps [devalue](https://github.com/sveltejs/devalue) from 5.7.1 to 5.8.1.
- [Release notes](https://github.com/sveltejs/devalue/releases)
- [Changelog](https://github.com/sveltejs/devalue/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/devalue/compare/v5.7.1...v5.8.1)

---
updated-dependencies:
- dependency-name: devalue
  dependency-version: 5.8.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-22 18:15:38 +07:00
dependabot[bot] 7b1ce430dc build(deps): bump fast-uri from 3.1.0 to 3.1.2 (#642)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.0...v3.1.2)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-19 10:13:53 +07:00
Sat Naing f0b644de3a feat!: AstroPaper v6 (#631)
* feat: add initial configuration and social icons for AstroPaper theme

* feat: add theme styles and design tokens

* chore: configure Astro with sitemap, i18n, fonts, and tooling

- Set site URL, i18n (single locale, no prefix), sitemap integration
- Add Google Sans Code font via stable fonts API
- Configure Shiki dual-theme markdown (min-light / night-owl)
- Fix astro-paper.config.ts to use relative import (alias not
  available when Vite loads root-level config files)
- Add @astrojs/sitemap and @typescript-eslint/parser dependencies
- Wire @typescript-eslint/parser into ESLint so TypeScript syntax
  in Astro frontmatter (type Props, etc.) parses correctly

* feat: add base styles, dark variant, and typography

- global.css: dark variant via [data-theme], base layer for * / a /
  button selectors, scrollbar tokens, layout utilities (max-w-app,
  app-layout), active-nav as @utility for Tailwind variant support
- html and body classes moved directly onto elements in BaseLayout
  (Tailwind-native approach) so only truly global selectors remain here
- typography.css: prose overrides, Shiki light/dark code block
  switching, diff/highlight/word-highlight transformer styles

* feat: add i18n types, English strings, and useTranslations helper

Plain typed object approach — no third-party i18n library needed.
Paraglide.js was considered but requires SSR output (hard blocker
for a static Astro site).

- UIStrings interface with nav, post, pagination, and a11y groups
- en.ts with `satisfies UIStrings` for literal-type preservation
- useTranslations(locale) helper falls back to English automatically

Adding a new language is a one-file addition; full routing stays
as a registry add-on.

* feat: add client-side theme toggle script

- Reads window.__theme.value set by the inline FOUC-prevention script
  to avoid re-detecting the theme on first load
- Toggles data-theme on <html> and persists to localStorage
- Fills <meta name="theme-color"> with the computed background colour
  so Android's browser chrome matches the page
- Re-runs setup on astro:after-swap for View Transitions navigation
- Carries theme-color across astro:before-swap to prevent navbar
  flicker on Android during page transitions
- Syncs with OS prefers-color-scheme changes at runtime

* feat: add BaseLayout and PostLayout

BaseLayout (replaces scaffold Layout.astro):
- Font, canonical URL via Astro.site, RSS autodiscovery
- FOUC-prevention inline script sets data-theme before first paint
  and exposes window.__theme.value for theme.ts to reuse
- html/body classes on elements directly (Tailwind-native)
- <slot name="head"> for child layout injection
- ClientRouter for View Transitions (respects lightAndDarkMode flag)
- googleVerification rendered from config instead of .env — it is a
  public string, not a secret, and not environment-specific

PostLayout (new):
- Wraps BaseLayout; injects article-specific head content via slot
- Overrides og:type to "article"
- Adds article:published_time / article:modified_time conditionally
- JSON-LD BlogPosting with conditional datePublished/dateModified
  (fixes old bug where absent dates produced "undefined" string)
- Structured data only on actual post pages (not home/archives/tags)

SiteConfig: add optional googleVerification field

* chore: replace scaffold index page with BaseLayout placeholder

* feat: add Header component

* feat: add Footer and Socials component

* chore: install dayjs, slugify, zod, @astrojs/mdx and add MDX integration

* feat: add resolved config that applies defaults in one place

Defaults for posts, features, socials, and shareLinks are merged in
src/config.ts so all consuming code gets non-optional types with no
scattered ?? fallbacks.

* feat: add content schema, blog path, and post utilities

Renames collection blog→posts, moves content to src/content/posts/,
adds .mdx support, and adds a typed pages collection. Includes
getSortedPosts, postFilter, getPath, and slugify utilities.

* feat: add Datetime and Card components

* refactor: switch layouts and components to resolved config

Replaces @/astro-paper.config imports with @/config and removes
optional chaining on feature flags now that the resolved config
guarantees non-optional values.

* feat: add home and footer i18n strings

* feat: implement home page with hero, featured, and recent posts

Replaces the BaseLayout placeholder with the full index page:
hero section with RSS link and social links, featured posts section,
recent posts capped at posts.perIndex, and an All Posts link. All
section labels come from i18n.

* feat: add pagination component

* feat: add Breadcrumb component with locale support

* feat: add Main component

* refactor: update code formatting in Card.astro

* feat: add posts page

* fix: add missing @astrojs/mdx dependency

* refactor: rename meta to pages in i18n

* refactor: improve code formatting in Breadcrumb

* refactor: destructure props in Main component for clarity

* feat: add tag pages

* feat: add About page

* chore: update i18n configuration to use site language from config

* feat: add Archives page

* feat: integrate Pagefind search functionality

* feat: add dynamic Open Graph image generation for posts

* feat: add post detail page

* feat: add Shiki transformers

* chore: remove unused edit link text

* chore: update .gitignore to include generated Pagefind directory

* chore: update site URL in configuration to production link

* chore: replace favicon and remove unused SVG assets, add new Open Graph image

* feat: update site config with default values

* feat: add default OG image path resolution

* fix: ensure edit post feature checks for enabled status correctly

* feat: implement dynamic Open Graph image generation

* feat: add RSS feed generation functionality

* feat: add 404 Not Found page

* feat: add robots.txt generation for SEO optimization

* refactor: change getSortedPosts to a named export

* refactor: change postFilter to a named export

* refactor: rename BaseLayout to Layout

* refactor: standardize locale handling across components

* refactor: update getPostsByGroupCondition location

* chore: remove unused Welcome component

* refactor(i18n): update links using getRelativeLocaleUrl

* refactor(i18n): add dynamic locale loading

* fix: update language attribute to use current locale

* fix: correct wording for updatedAt in post translations

* fix: update layout titles to use correct translation keys for tags pages

* chore: use new colors for better DX and a11y

* feat: add underline icon for active icon nav

* feat: add toc for markdown contents

* refactor: remove unused feature flags in config

* refactor(i18n): enhance locale handling and path management

* fix: ts unused variable hint

* refactor: extract locale stripping logic into a util func

* refactor(i18n): improve locale handling in tag pages

* refactor: update post URL helper functions

* refactor(i18n): replace pathWithBase with getRelativeLocaleUrl for locale handling

* refactor: rename fileWithBase to getAssetPath

* refactor: use runtime agnostic APIs for file paths

* refactor: use transition directive for heading transition

* refactor: remove unused title element from tag page

* fix: decouple ClientRouter from lightAndDarkMode flag

* refactor: rename `postPaths.ts` to `getPostPaths.ts`

* refactor: remove unused `minutesRead` string from post translations

* refactor: simplify AdjacentPostNav component by passing prevPost and nextPost directly

* refactor: remove unused code declaration

* docs: add existing blog posts

* chore: update astro and @astrojs/check dependencies to latest versions

* build: use experimental svg optimizer

* chore(repo): restore project meta files and Docker configs

* refactor: update code formatting with Prettier

* docs: update README and docs

* docs: add JSDoc comments to utility functions

* docs: add JSDoc comments to resolved config file

* fix(og): avoid double slashes when appending index.png

* chore(ci): update Node.js version to 22.12.0 in CI workflow

* feat: improve og image generation with Astro's getFontFileURL API (#632)

* feat: improve og image generation with Astro's getFontFileURL API

- remove @resvg/resvg-js and use sharp to convert SVG to PNG
- update og image generation to use Astro's getFontFileURL API for better font handling

* docs: update README and dynamic OG images documentation

- remove outdated content and clarify dynamic OG image generation process in README.
- add new image example and update instructions for handling non-Latin characters in dynamic OG images.
- adjust copyright year in README to 2026.

* fix(header): adjust icon button alignment in mobile

* feat(docs): add ResponsiveTable to use it in MDX posts (#634)

* feat(docs): add ResponsiveTable to use it in MDX posts

Introduce ResponsiveTable with variant-based styling. Rename docs posts to
.mdx, wrap tables in the component, and remove redundant table `code` rules
from prose typography.

* chore(prettier): ignore .mdx files when checking format

* chore(ci): update Node.js version to 24 in CI workflow

* bump: upgrade Astro and dependencies

* fix: remove redundant backUrl script bug

* fix(header): adjust button and icon alignment

* fix(a11y): improve muted-foreground color contrast

* docs: update predefined color schemes

* chore: support site verification env as fallback for googleVerification

* docs: add astro paper v6 updates in docs

* docs: add AstroPaper-v6.png in astro-paper-6 blog post

* fix: update back-to-top button DOM placement (#641)

Closes #626, #131, #493
2026-05-17 16:17:58 +07:00
satnaing f3005328e5 chore: correct closing tag in README.md for Lighthouse Score image 2026-01-14 06:18:08 +07:00
Sat Naing 4a12d9fc7e chore: cleanup unused files and docs (#610)
* chore: remove unused `public/assets` directory

* chore: move `remark-collapse` type declaration to `src` directory

* chore: reorganize project structure in README.md for clarity

Closes #609
2026-01-14 05:55:38 +07:00
Sat Naing fb63d96011 fix: slugify supports better acronyms and preserve non-latin char (#606)
* fix: slugify supports better acronyms and preserve non-latin char

Update slugify function to handle better acronyms and preserve non-latin characters.
- uses slugify (simov) for Latin-only strings to fix acronym issue (eg: e2e-testing)
- uses lodash.kebabcase for strings with non-latin characters to preserve them

* fix: remove dots in slugified titles for view transitions

Fixes #584
2026-01-14 05:20:25 +07:00
Sat Naing c20d747f38 docs: fix Image component typo and prevent code fence formatting (#605) 2026-01-10 21:50:23 +07:00
Sat Naing 29fe8a30de chore: remove unused IconSun.svg and clean up Layout.astro styles (#604)
- remove unused `IconSun.svg`
- remove unused styles inside `Layout.astro`
- remove `autofocus: true` option in pagefind initialization
2026-01-10 21:46:53 +07:00
Sat Naing c61a75575d fix: add autofocus in search bar and update search result title style (#603) 2026-01-10 21:27:23 +07:00
Sat Naing 698295d23d feat: integrate Astro fonts API with Google Sans Code font (#602)
- Add Google Sans Code font and make it the default font
- Font is preloaded with latin subset and weight 400 and style normal for optimal performance
- Add font configuration section in how to config docs
2026-01-10 21:08:31 +07:00
Sat Naing 5bb8e405bb refactor: optimize theme script to prevent render-blocking (#601)
* refactor: optimize theme script to prevent render-blocking

- Move theme script from `public/` to `src/scripts/`
- Split into minimal inline script (FOUC prevention) + external script (non-blocking)
- Rename `primaryColorScheme` to `initialColorScheme`
- Rename `toggle-theme.js` to `theme.ts`
- Use TypeScript for theme script
- Update docs for theme customization
2026-01-10 07:26:25 +07:00
satnaing 25d25437cf bump: version 5.5.0 → 5.5.1 2026-01-08 19:04:42 +07:00
Sat Naing 7141d82dbd refactor: update component props and improve types (#600)
- stop exporting component Props
- replace interface with type for component Props
- enhance dynamic rendering in several components
2026-01-05 22:56:38 +07:00
Sat Naing f5f863f9d2 fix: improve Tag component by making it entire component clickable (#598)
Update Tag component structure/styles and make the entire
component clickable
2026-01-04 20:43:46 +07:00
Sat Naing 312d1c3eed refactor: improve props usage and dynamic rendering in LinkButton (#599)
- update LinkButton Props by using HTMLAttributes from astro/types
- use dynamic tags for rendering element dynamically
- improve a11y for pagination
2026-01-04 20:37:18 +07:00
Sat Naing ceb406314b refactor: improve semantic by replacing decorative hr with borders (#597)
Replace decorative usage of Hr component with borders to improve
semantic.

- remove Hr component
- replace decorative hr elements with borders
- introduce app-layout utility class
- update layout and spacing
- update docs about border css custom property
2026-01-04 20:24:34 +07:00
Sat Naing 93d491b7f3 bump: upgrade astro and dependencies (#596)
* bump: update astro to v5.16.6 and related dependencies

* bump: update dependencies to latest versions

- Upgraded @tailwindcss/vite from 4.1.11 to 4.1.18
- Updated dayjs from 1.11.13 to 1.11.19
- Bumped satori from 0.15.2 to 0.18.3
- Updated sharp from 0.34.2 to 0.34.5
- Upgraded @pagefind/default-ui from 1.3.0 to 1.4.0
- Updated @tailwindcss/typography from 0.5.16 to 0.5.19
- Bumped @typescript-eslint/parser from 8.36.0 to 8.51.0
- Updated eslint from 9.30.1 to 9.39.2
- Upgraded eslint-plugin-astro from 1.3.1 to 1.5.0
- Updated globals from 16.3.0 to 16.5.0
- Bumped pagefind from 1.3.0 to 1.4.0
- Updated prettier from 3.6.2 to 3.7.4
- Upgraded prettier-plugin-tailwindcss from 0.6.13 to 0.7.2
- Updated typescript from 5.8.3 to 5.9.3
- Bumped typescript-eslint from 8.36.0 to 8.51.0

* chore: fix prettier warnings

- Changed single quotes to double quotes for the @plugin directive in typography.css.
- Updated CSS classes to use wrap-break-word for better text handling in various elements.
2026-01-01 20:12:17 +07:00
StephenFang aad5ac67e4 fix(og-images): wrap Buffer in Uint8Array for Response body (#568)
Astro uses Web API typings; Response doesn’t accept Node Buffer. Convert
the generated OG image Buffer to Uint8Array before constructing Response
to satisfy BodyInit and fix the build/type error.

Closes #560
2025-08-21 21:30:10 +07:00
allanallankim2 aad228f89d docs: fix typo in adding-new-post article (#565) 2025-08-21 19:19:23 +07:00
Sat Naing e8bcc0dd60 bump: update astro to version 5.12.0 and related dependencies (#563)
- Updated astro from 5.11.0 to 5.12.0 in package.json and pnpm-lock.yaml.
- Upgraded @astrojs/markdown-remark from 6.3.2 to 6.3.3.
- Updated smol-toml from 1.3.1 to 1.4.1.
- Updated semver from 7.7.1 to 7.7.2.
2025-07-20 14:24:35 +07:00
Minh d7e209d202 fix: make post header vertical bar respect global settings (#562) 2025-07-20 14:24:21 +07:00
Sebastian Arrieta c5a34c7838 fix: skip invalid code block metadata without key-value pairs (#561)
This ensures compatibility with transformers like `transformerMetaHighlight`, which may include metadata without key-value formatting.

Previously, metadata entries without an = would cause [key, value] to be undefined, potentially introducing invalid entries into the map. We now skip such entries to ensure only valid key-value pairs are parsed.
2025-07-20 00:13:44 +07:00
satnaing 9d96bbd57f bump: version 5.4.3 → 5.5.0 2025-07-12 00:21:49 +07:00
Sat Naing 493c671e0f fix: update syntax highlighting transformer styles (#558) 2025-07-10 21:17:09 +07:00
Sat Naing c863c8219d feat: enhance file name transformer with additional options (#555)
- Add v2 badge-style option as alternative to v1 tab-style
- v2 features: border, rounded corners, positioned with CSS custom property
- v1 features: tab-style with rounded top corners, muted background
- Add hideDot option to control green dot indicator visibility
- Include comprehensive JSDoc documentation with usage examples
- Support both styling variants with configuration parameters
2025-07-09 23:35:41 +07:00
Rob Easthope 5d47275687 fix: typo in astro-paper-v5 blog post (#556) 2025-07-09 23:30:41 +07:00
Sat Naing e03aed6bf2 build(deps): update astro and other dependencies (#557)
- Bump @tailwindcss/vite, astro, and tailwindcss to 4.1.11, 5.11.0, and 4.1.11 respectively.
- Upgrade eslint, prettier, and related packages to their latest versions.
- Update typescript-eslint packages to 8.36.0 for improved compatibility.

* fix: disable ts check for tailwindcss plugin

* fix: adjust list item formatting in tailwind typography example
2025-07-09 23:29:31 +07:00
vivekkoya 2a2dcc0de8 docs: add Bun installation instructions to README (#552) 2025-07-09 23:28:09 +07:00
satnaing aedd98ddca bump: version 5.4.2 → 5.4.3 2025-06-21 15:15:31 +07:00
Sat Naing a9b9c3acbf fix: remove time from post datetime display (#546) 2025-06-20 23:48:38 +07:00
Sat Naing fa37a477d0 fix: update edit post link styling and text (#545) 2025-06-20 22:49:27 +07:00
Sat Naing ce5b57b4d7 build(deps): upgrade astro and dependencies (#544)
* build(deps): bump astro from 5.9.2 to 5.10.0

* build(deps): upgrade minor and patch dependencies
2025-06-20 22:41:16 +07:00
Viktor Szépe 9ee01aafa2 fix: typos across codebase (#543) 2025-06-20 17:10:07 +07:00
satnaing bd2f335c3c bump: version 5.4.1 → 5.4.2 2025-06-15 15:58:33 +07:00
Sat Naing 5fb3b25acb fix: broken typography in about layout (#541)
* fix: broken typography in about layout

* chore: update about content
2025-06-15 15:55:17 +07:00
Sat Naing 0d9a7bbd93 fix: remove extra padding in fenced code blocks (#540)
Closes #539
2025-06-15 09:34:25 +07:00
satnaing 37a487801d bump: version 5.4.0 → 5.4.1 2025-06-14 23:46:32 +07:00
Sat Naing f7cb267854 refactor: update tailwind typography css overrides (#538)
* refactor: update tailwind typography css overrides

Update TailwindCSS typography overrides to use less
`important`; and update selectors to make them easier
to read.

* refactor: update focus styles to be consistent
2025-06-14 23:44:03 +07:00
Sat Naing 4c2aebc304 fix: make heading anchors in article visible on mobile (#537) 2025-06-14 23:26:10 +07:00
Sat Naing 2bc9296732 build: add read permission in ci workflow (#536)
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2025-06-14 08:36:54 +07:00
satnaing 572553df16 bump: version 5.3.0 → 5.4.0 2025-06-14 00:16:02 +07:00