تاکسلی خانهٔ فارسی نرمافزار آزاد و متنباز است: خبرهای گنو/لینوکس و پروژههای آزاد، معرفی توزیعها و میزکارها، آموزش، و تقویم رویدادهای اجتماع.
کد و محتوا هر دو در همین مخزناند و هر دو آزادند.
git clone https://github.com/goudarz/tuxly.git
cd tuxly
npm install # نصب وابستگی و موارد مورد نیاز
npm run dev # http://localhost:4321نیازمندی: Node 24 یا بالاتر. اگر nvm دارید، nvm use نسخهٔ درست را از
.nvmrc برمیدارد.
(اگر میخوایید شماره در لوکال داشته باشید یا بهروز بشوند)بعد از اولین نصب، یک بار این را اجرا کنید تا شمارهٔ نسخهٔ توزیعها پر شود:
npm run update:versions| دستور | کار |
|---|---|
npm run dev |
سرور توسعه |
npm run build |
تصویر OG + بیلد ایستا + ایندکس جستوجو + کپی آن به public/ |
npm run preview |
پیشنمایش خروجی بیلد |
npm run check |
اعتبارسنجی اسکیمای محتوا و تایپها |
npm run info |
نمایش وضعیت پروژه و همهٔ دستورها |
npm run update:versions |
بهروزرسانی نسخهها از ویکیداده و endoflife.date |
npm run update:versions -- --verbose |
همان، با جزئیات کامل خطا |
npm run ingest:dry |
اجرای آزمایشی جمعآوری خوراکها، بدون نوشتن فایل(WIP) |
content/ محتوا — مارکداون، جدا از کد
posts/ مطالب
entities/ توزیعها، میزکارها، پنجرهگردانها، پروژهها، اجتماعها
events/ رویدادها
authors/ نویسندگان
glossary/terms.json واژهنامهٔ فنی
src/
components/ کامپوننتها
layouts/ چیدمان صفحهها
lib/ کمکیها — فارسی، schema، خوراک
integrations/ افزونهٔ بیلد پیوندهای بیرونی
pages/ مسیرها
pipeline/ جمعآوری خوراک منابع(WIP)
scripts/ بنر، بهروزرسانی نسخه، تصویر OG، تولید محتوای اولیه
فایل تازه در content/posts/ بسازید. از _template.md کپی بگیرید — همهٔ
فیلدها با توضیح آنجاست.
اسکیما در src/content.config.ts سختگیر است و بیلد را میشکند اگر:
- مطلبی
sourceدارد ولیsourceUrlیاcontextندارد originStatusرویdraft-reviewباشد ولیdraft: falseoriginStatusرویreviewedباشد ولیreviewedByخالی- تصویر شاخص بدون
coverAltباشد
این عمدی است. خطای بیلد بهتر از صفحهٔ منتشرشدهٔ ناقص است.
جستوجو در حالت dev هم کار میکند — ولی فقط بعد از یک بیلد. ایندکس را
Pagefind در dist/ میسازد، پس npm run build در پایان آن را داخل
public/pagefind/ کپی میکند (این پوشه در .gitignore است).
دو مانع سر راه بود و هر دو حل شدهاند: astro dev فقط public/ را سرو
میکند نه dist/ را، و Vite هم حاضر نیست فایل .js داخل public/ را به
عنوان ماژول تحویل بدهد و خطای ۵۰۰ میداد. افزونهٔ
src/integrations/pagefind-dev.mjs مسیر /pagefind/ را پیش از میانافزار
transform ویت تحویل میدهد. فقط در حالت توسعه؛ در پروداکشن این فایلها
دارایی ایستای معمولیاند.
نقشهٔ سایت یک مسیر است، نه یک مرحلهٔ پس از بیلد. /sitemap.xml را
src/pages/sitemap.xml.ts مستقیم از کالکشنهای محتوا میسازد. مرحلهای که
بعد از بیلد اجرا شود میتواند از قلم بیفتد؛ یک route نمیتواند. هر URL
lastmod واقعی از خود محتوا میگیرد، نه زمان بیلد.
نسخهها دستی وارد نمیشوند. شمارهٔ نسخهٔ سی توزیع اگر دستی نوشته شود، ظرف
چند ماه بخش بزرگیاش چون دیگر یادمان میره بهروز کنیم، غلط میشود. scripts/update-versions.mjs هفتگی از
endoflife.date و ویکیداده میگیرد. اگر دادهای نبود، فیلد خالی میماند و
صفحه «در حال بررسی» نشان میدهد — بهتر از حدس زدن.
تکمخزن، بدون submodule. کد و محتوا یکجا. دو پروانه: کد
AGPL-3.0-or-later، محتوا CC BY-SA 4.0 (در content/LICENSE). submodule یعنی هر کلون بدون
--recursive میشکند و هر تغییر دو PR میخواهد(به خاطر شرایط پایدار نبودن اینترنت داخل کشور این تصمیم گرفته شد).
تصاویر داخل مخزن. در src/assets/ یا کنار خود مطلب. در بیلد خودکار به
AVIF و WebP و چند اندازه تبدیل میشوند. نه سرویس خارجی، نه چالشهای محدودیتهای که ممکنه پیش بیاید.
اسکرول بینهایت روی صفحهبندی واقعی سوار است. لینکهای /news/2 در HTML
هستند چون خزندهٔ موتورهای جستوجپ اسکرول نمیکند. جاوااسکریپت دو صفحه را خودکار میآورد و
بعد دکمه نشان میدهد، وگرنه کاربر هیچوقت به فوتر نمیرسد.
| فایل | موضوع |
|---|---|
docs/DEPLOY.md |
استقرار روی GitHub Pages و دامنهٔ اختصاصی |
docs/WORKFLOW.md |
جمعآوری اخبار، بازبینی، انتشار(WIP) |
docs/VERSIONS.md |
اگر نسخه خودکار گرفته نشد چه کنیم |
docs/COMMITS.md |
قرارداد پیام کامیت |
NOTICE.md |
خلاصهٔ پروانهها به زبان ساده |
CODE_OF_CONDUCT.md |
منشور رفتاری اجتماع |
| بخش | پروانه |
|---|---|
| کد | AGPL-3.0-or-later |
| محتوا | CC BY-SA 4.0 |
| نشان و لوگوتایپ | علامت تجاری — قواعد |
| وزیرمتن و Space Grotesk | SIL OFL 1.1 |
مطالبی که از منابع دیگر میآیند، پروانهٔ خودشان را نگه میدارند و پایین هر صفحه ذکر میشود.
AGPL یعنی: استفاده، تغییر و بازنشر آزاد است — به شرط اینکه سورس نسخهٔ خودتان را منتشر کنید (حتی اگر فقط روی سرور اجرایش میکنید) و به مخزن اصلی لینک بدهید. خلاصهٔ ساده در NOTICE.md.