Skip to content

Repository files navigation

نشان تاکسلی

تاکسلی · tuxly

دنیای نرم‌افزار آزاد، به فارسی

اخبار · معرفی · آموزش · رویدادها

tuxly.ir · خوراک RSS · هویت بصری


این چیه

تاکسلی خانهٔ فارسی نرم‌افزار آزاد و متن‌باز است: خبرهای گنو/لینوکس و پروژه‌های آزاد، معرفی توزیع‌ها و میزکارها، آموزش، و تقویم رویدادهای اجتماع.

کد و محتوا هر دو در همین مخزن‌اند و هر دو آزادند.

شروع

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: false
  • originStatus روی 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.

About

Resources

Code of conduct

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages