Skip to content
CelestoAIPublic

About

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

110 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Celesto AI Blog 📄

The official blog of Celesto AI, sharing insights, research, and updates on the frontiers of artificial intelligence.

🌐 Live Site

The blog is served at celesto.ai/blog/.

✍️ Adding New Posts

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.

👨🏻‍💻 Local Development

  1. Install dependencies:

    npm install
  2. Start the dev server:

    npm run dev

    The site will be available at http://localhost:4321/blog/.

🧞 Commands

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

Response security

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.

Social preview images

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.

🤝 Contribution

We are currently not accepting external Pull Requests (PRs) unless you have discussed your proposal with the team first.

✨ Feedback & Suggestions

If you have any suggestions/feedback, contact us at hello@celesto.ai.

📜 License

Licensed under the MIT License, Copyright © 2026


Maintained by Celesto AI (hello@celesto.ai). Originally created by Sat Naing.

About

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Used by

Contributors

Languages