Commit Graph

47 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
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
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 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
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 38ebf6e1b6 feat: add RTL language support (#531)
* feat: add RTL language support

- Add `SITE.dir` config option.
- Replace physical Tailwind classes with logical
property classes.

Resolves #439

* docs: add `dir` section in doc
2025-06-14 00:07:27 +07:00
Tanishq Manuja 852d3b81ba refactor: use new astro env (#507)
* refactor: use new astro env

* chore: directly use PUBLIC_GOOGLE_SITE_VERIFICATION
2025-06-07 16:36:02 +07:00
Sat Naing 5cff7c50b9 feat: add global and per-post timezone support (#491)
* refactor: replace embedded svg with svg icon

* feat: add global and per-post timezone support

- add `SITE.timezone` in config to define a global default timezone.
- allow per-post timezone overrides via `timezone` in frontmatter.
- update date formatting logic to use the correct timezone when rendering timestamps.
- ensure that posts without a timezone fallback to `SITE.timezone`.
- improve consistency between local and deployed timezones.

* refactor: replace `LOCALE` constant with  `SITE.lang`

* docs: update guides

* fix: update code word-break inside markdown table

Closes #466
2025-03-22 17:21:21 +07:00
Sat Naing 5e92a3d4da fix: initial light mode flash in dark mode (#488) 2025-03-20 12:42:30 +07:00
Sat Naing 6749f62015 fix: add an option to disable dynamic OG image generation (#476)
* fix: add an option to disable dynamic OG image generation

Add new `dynamicOgImage` option in the `SITE` object inside 
`src/config.ts` file to disable auto og-image generation during build.

Resolves #428

* docs: update guides for `SITE.dynamicOgImage` option
2025-03-12 20:47:12 +07:00
satnaing b995f4dada fix: add author url in Google JSON-LD conditionally 2025-03-08 18:21:37 +07:00
satnaing 172e14b5f4 build!: upgrade to Tailwind CSS v4 2025-03-08 18:21:37 +07:00
Sat Naing cbbb3eb1e1 perf: preload font and load theme script asynchronously (#380)
Improve page performance by preloading the font with
`as="style"` and loading the theme script asynchronously.
2024-09-16 21:28:51 +07:00
David Legrand 8fbb0b4d85 feat: add JSON-LD structured data (#260)
- Add author profile to SITE variables
- Add JSON-LD to Layout.astro
2024-07-14 15:06:46 +07:00
satnaing d929ce1fef fix: solve modDatetime type errors
Update modDatetime props type to have null type for components that have modDatetime as props.
2024-01-05 10:32:31 +06:30
satnaing e7c9a56722 refactor: enable scroll-smooth only in post detail page 2024-01-04 15:53:12 +06:30
Sat Naing 80e67a1dca feat: add modified datetime in blog posts
* feat: add modified datetime in blog posts

Add modDatetime in blogSchema. Update Datetime component to accept modDatetime. Update sorting logic. Rename datetime to pubDatetime in Datetime component.

Closes: #134

* feat: add published_time & modified_time meta tags

* docs: update related blog posts to be up-to-date

* fix: remove extra spaces in breadcrumbs
2023-12-26 10:11:26 +06:30
satnaing cd02b047d2 fix: #133 update LOCALE config to cover overall locales
Update LOCALE inside config.ts to include html lang value and datetime locale values. Updated respective files and blog post.

Closes: #133
2023-12-20 10:50:45 +06:30
tanishqmanuja 88d9343ab5 feat: use new og images in layout 2023-09-26 02:04:11 +06:30
satnaing cbdaa59bae feat: add ViewTransitions from Astro
Integrate ViewTransitions API from Astro v3.

resolve #96
2023-09-26 02:04:11 +06:30
satnaing f25377674e feat: update theme-color tag on theme switch 2023-09-26 02:04:11 +06:30
Nahuel Garbezza 4687bd516b feat: support custom canonical URLs (#83)
Adding an optional attribute in the posts' frontmatter that allows the user to set a custom canonical URL
2023-07-23 10:55:19 +06:30
satnaing e017dcf9a5 style: format files with prettier 2023-06-21 11:48:07 +06:30
Gabriel Kanev f6ac8104b2 fix: add missing sitemap in head (#69) 2023-05-15 10:30:57 +06:30
satnaing ccb5a7787c refactor: update imports paths 2023-03-23 23:20:33 +06:30
Sat Naing 27507d1d78 feat: generate og images in png format (#43)
* feat: generate og images in png format

In production mode, generate og images from svg to png format.

fix #40

* refactor: update og image format from svg to png

Update OG image format in post detail to png. Update twitter og images to auto-generated dynamic og
images.
2023-03-01 18:46:42 +06:30
satnaing 0fe14f4217 refactor: refactor relative imports to aliases 2023-01-28 00:52:18 +06:30
satnaing 52197d319d perf: update font load strategy for better performance 2023-01-19 18:21:13 +06:30
satnaing 9434d850e1 fix: use default-og for twitter card 2022-12-30 16:14:12 +06:30
satnaing d7e28c700f build: add google-site-verification tag in the header 2022-12-20 22:42:29 +06:30
satnaing 0eeed8e870 refactor: update toggle theme function for better structure and a11y
Move theme switch js codes in Layout.astro file to external js file (toggle-theme.js). Update
.prettierignore to exclude the new toggle-theme.js file.  Update base.css for new data-theme
attribute.
2022-11-26 23:43:27 +06:30
Sat Naing 3bc440144a Add primaryColorScheme feature 2022-09-26 12:04:10 +06:30
Sat Naing e6e70f713e Add bold and italic font style 2022-09-26 12:03:40 +06:30
Sat Naing 10358b0fbf Add prefers-color-scheme media query 2022-09-26 10:11:18 +06:30
Sat Naing ef1fac6043 Set default og image even when empty string is specify 2022-09-23 13:30:58 +06:30
Sat Naing 9db22658ed Replace env values with SITE config object 2022-09-22 21:20:40 +06:30
Sat Naing 3a34456655 Eliminate google font style link to prevent render-blocking 2022-09-17 14:26:35 +06:30
Sat Naing 98e45890f7 Fix og image to be at root url always 2022-09-14 00:05:52 +06:30
Sat Naing 50c3309907 Improve SEO by adding necessary meta tags 2022-09-12 22:41:30 +06:30
Sat Naing efec1d3f07 Refactor body class codes to base.css 2022-09-11 15:25:14 +06:30
Sat Naing b19fd5d986 Update body min-height and body style flex 2022-09-11 15:23:49 +06:30
Sat Naing f995485c09 Add light/dark mode functionality 2022-09-09 00:48:23 +06:30
Sat Naing 0d5378969f Add IBM Plex Mono font 2022-09-08 22:51:27 +06:30
Sat Naing 147d934e97 Add custom base style of Tailwind 2022-09-08 21:42:09 +06:30
Sat Naing 2ffd37cb25 Add social media & SEO meta tags 2022-09-08 20:57:24 +06:30
Sat Naing 44cf5afeba Initial commit from Astro 2022-09-08 19:20:34 +06:30