A blog backend in ten minutes.
Install Tangen, define a post and an author, push once, and query it from your app with full types. By the end you have a real content backend, a typed API, and an admin your team can use.
- 1 ~1 min
Create your project
One command scaffolds the project, installs Tangen, and writes a ready .env.
terminal$ npx -p @tangen/cms tangen create blog $ cd blog # then set your Postgres URL in .env
- 2 ~3 min
Define your content
Write the model as TypeScript. A post, an author, and a relation between them.
content/blog.tsimport { defineObjectType, field } from '@tangen/cms' export const author = defineObjectType({ name: 'author', fields: { name: field.text({ validation: { required: true } }), bio: field.richtext() }, }) export const post = defineObjectType({ name: 'post', fields: { title: field.text({ validation: { required: true } }), body: field.richtext(), author: field.relation({ targetType: 'author' }), }, })
- 3 ~1 min
Create the database
Bootstrap creates the tables from your schema and generates types. Later, tangen push applies changes.
terminal$ tangen bootstrap $ tangen push # apply later schema changes - 4 ~2 min
Query from your app
Read content anywhere with the typed SDK. Keys, filters, and sorts are checked at compile time.
app/blog.tsconst { data } = await tangen .objects('post') .where({ status: 'published' }) .sort('publishedAt', 'desc') .get()
- 5 ~3 min
Write and preview
Open the admin, add a post, and watch it render on your real site as you type. No publish-and-refresh loop.
Build on Tangen in the private beta.
Define a content type, push it, and query it from anywhere, with your own AI agent doing the rest. Request access and we will get you set up.