The official blog of Celesto AI, sharing insights, research, and updates on the frontiers of artificial intelligence.
The blog is served at celesto.ai/blog/.
To add a new blog post, create a new Markdown file in the src/data/blog/ directory.
Example frontmatter:
---
author: Celesto AI
pubDatetime: 2026-02-05T12:00:00Z
title: "My New AI Post"
slug: my-new-ai-post
featured: true
draft: false
tags:
- ai
- updates
description: A short summary of the blog post for SEO and previews.
---Production output excludes drafts and posts more than 15 minutes before
pubDatetime. This policy covers article pages, archives, social preview images,
search, and sitemaps. A new build is required when a scheduled post becomes due.
The dev server permits future dates so authors can preview a post locally.
-
Install dependencies:
npm install
-
Start the dev server:
npm run dev
The site will be available at
http://localhost:4321/blog/.
| Command | Action |
|---|---|
npm install |
Installs dependencies |
npm run dev |
Starts local dev server at localhost:4321/blog/ |
npm run build |
Builds the production site to ./dist/ |
npm run preview |
Previews the build locally |
npm run format |
Formats code with Prettier |
npm run lint |
Lints code with ESLint |
npm run test:security |
Checks publication, images, and response headers in a disposable build |
Cloudflare static assets use public/_headers; Astro pages and endpoints use
src/middleware.ts. Both apply MIME, referrer, and frame policies. The HTTP
frame policy supplements Astro's existing script and style CSP rules.
Article images use build-time optimization. Runtime image requests serve allowed
source images without a Cloudflare Images transform. Local secrets belong in
ignored .env* or .dev.vars* files; example files may remain in version control.
Each post without an ogImage override gets a 1200 × 630 PNG at
/blog/posts/<post-path>/index.png. npm run build creates these files with
Satori, Resvg, and the installed Geist fonts; no external font service or API key
is required. Open Graph and X metadata select the generated image automatically.
The site fallback is /blog/og.png.
Cards use the Celesto logo, the first post tag as a topic label, the title, and the SEO description. Long titles and descriptions have line limits to keep the card within its fixed canvas.
Set ogImage in a post's frontmatter to use a custom local asset or absolute
image URL. Edit src/utils/og-templates/post.js to change the shared card design.
Social networks may cache old previews after a deploy.
We are currently not accepting external Pull Requests (PRs) unless you have discussed your proposal with the team first.
If you have any suggestions/feedback, contact us at hello@celesto.ai.
Licensed under the MIT License, Copyright © 2026
Maintained by Celesto AI (hello@celesto.ai). Originally created by Sat Naing.