* 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
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.
- 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
Blog posts can now be structured into subdirectories, which determine their slugs.
Example:
- `/src/data/blog/2025/testing.md` → `/posts/2025/testing`
Directories prefixed with `_` will be excluded from the slug.
Example:
- `/src/data/blog/_examples/tailwind-typography.md` → `/posts/tailwind-typography`
Closes#470, #366
Previously, `github-slugger` omitted emojis when generating slugs, transforming tags like "🌱-my-tag" into "-my-tag". This change replaces `github-slugger` with `lodash.kebabcase` to ensure that emojis are preserved in the generated slugs, improving the accuracy and consistency of tag representations.
Changes made
- update font source with Google font
- add error handling in font fetching logic
- update docs in dynamic-og-images blog post
---------
Co-authored-by: satnaing <satnaingdev@gmail.com>
* Hide posts when PubDateTime is not reached
* refactor: extract filter logic into a file
* docs: update SITE config docs
---------
Co-authored-by: satnaing <satnaingdev@gmail.com>
* feat: add pagination in tag posts
Implement pagination in tag posts. Refactor and extract pagination logic and pagination component.
Closes: #152
* fix: update breadcrumbs for updated tag pagination
Update slugified titles to be unslugified in the tag page. This is for better SEO and better a11y. Url and tag elelemnts will still be slugified.
Closes: #179
* 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
* refactor: getUniqueTags should perform conversions exactly once per tag
Previously, the `forEach` loop was spreading the tags list and updating it on every iteration. So for every post, the slugify operation was happening on previously converted data again.
Similarly, the last filter operation to remove duplicates was repeated for every post (`O(N * log N)`) instead of checking once at the end (`O(N)`).
* feat: Sort the tags in ascending order (lexicographic)
As per feedback from: https://github.com/satnaing/astro-paper/pull/78#issuecomment-1593979458
* 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.
Remove formatDatetime function. Created a JSX function component (FormattedDatetime) inside Datetime
component. This component returns formatted date and time with better voiceover enhancements.