بهترین ژورنالهای توسعهدهندگان، هم خواندنشان راحت است هم نوشتنشان. این سایت روی یک استک عمداً ساده ساخته شده: Next.js در فرانت و FastAPI در بکاند که با یک API کوچک JSON حرف میزنند.
چرا Next.js
کامپوننتهای سرور یعنی پستها از قبل رندر میشوند. بدون لودینگ، بدون پرش صفحه، و سئوی خوب به صورت رایگان.
// app/posts/[slug]/page.tsx
export default async function PostPage({ params }) {
const post = await getPost(params.slug);
return <Article post={post} />;
}
چرا FastAPI
API یک وبلاگ به CRUD، صفحهبندی و جستجو نیاز دارد — همین و نه بیشتر. FastAPI مدل تایپشده، اعتبارسنجی و مستندات خودکار را تقریباً بدون کد اضافه میدهد.
@app.get("/api/posts")
def list_posts(tag: str | None = None, q: str | None = None):
return query_posts(tag=tag, q=q)
قانون پروکسی
سرور ما یک reverse proxy برای سرویسهای دیگر هم دارد. قانون ساده است: به آن دست نزن. برای همین هر دو اپ روی پورت خودشان اجرا میشوند و فرانتاند درخواستهای API را سمت سرور پراکسی میکند.
درسها
- API را ساده نگه دار — طراحی با فرانتاند است.
- SQLite با حالت WAL برای یک ژورنال کاملاً کافی است.
- استقرار با systemd؛ بعد از ریاستارت سرور هم خودش برمیگردد.