1
Ringkasan Proyek FreeStuffDev
FreeStuffDev adalah direktori layanan gratis untuk developer: database, hosting, autentikasi, sampai perkakas kecil untuk prototyping dan pembangunan MVP. Proyeknya open-source, bisa dilihat di freestuff.dev, dan dibangun dengan Astro. README.md:6-101
Tidak ada database di balik situs ini. Setiap layanan adalah satu berkas Markdown di src/content/tools, dan seluruh halaman diturunkan dari berkas itu pada saat build.
Satu berkas Markdown, satu layanan
Skema collection tools menetapkan lima field wajib: title, snippet, link, tags, dan createdAt. Tiga field lain opsional: thumbnail, updatedAt, dan isPaid. src/content/config.ts:3-142
Isi setelah frontmatter adalah daftar fitur gratis, satu fitur per baris. src/content/tools/ably-realtime.md:11-133
Aliran dari berkas ke halaman berjalan satu arah: collection dibaca sekali, lalu dipakai bersama oleh beberapa rute.
graph TD
MD["src/content/tools/*.md"] --> COL["toolCollection di config.ts"]
COL --> GC["getCollection('tools')"]
GC --> IDX["/ (index.astro)"]
GC --> REC["/recent (recent.astro)"]
GC --> TAG["/tags/:tag"]
GC --> ALT["/alternative/:slug"]
IDX --> CARD["Card.astro"]
REC --> CARD
TAG --> CARD
ALT --> CARD
style MD fill:#336791,color:#fff
style COL fill:#f59e0b,color:#000
style GC fill:#8b5cf6,color:#fff
style IDX fill:#2d7d46,color:#fff
style REC fill:#2d7d46,color:#fff
style TAG fill:#2d7d46,color:#fff
style ALT fill:#2d7d46,color:#fff
style CARD fill:#2d7d46,color:#fff
%% fig: Dari berkas Markdown ke halaman
%% desc: Berkas di src/content/tools masuk ke collection tools, dibaca getCollection, lalu digambar Card.astro di empat rute.Empat rute daftar memakai komponen kartu yang sama; beranda memetakan hasil collection menjadi <Card tool={tool} /> di dalam satu div. src/pages/index.astro:69-754 Detail tipe dan validasinya dibahas di Skema Content Collection tools, sedangkan template berkas dan aturan kontribusi dibahas di Format Berkas dan Aturan Kontribusi.
Aturan kurasi isPaid
README menetapkan dua ambang penerimaan. Situs menerima layanan gratis atau free trial minimal 1 tahun. Kalau layanan hanya memberi trial 7 hari atau tidak punya tawaran gratis sama sekali, kontributor menulis isPaid: true di frontmatter. README.md:13-225 README juga menolak tool yang spesifik bahasa atau framework, tautan ke dokumentasi atau forum suatu tool, dan tautan ke "bagian dari tool tertentu". README.md:16-226
Karena isPaid dideklarasikan sebagai boolean opsional di skema, penghapusan tool berbayar dari daftar utama terjadi lewat penyaringan, bukan lewat perubahan skema. src/content/config.ts:3-142
Penyaringan berjalan saat build. Beranda mengambil collection dengan predikat data.isPaid !== true src/pages/index.astro:8-117, dan halaman recent memakai predikat yang sama src/pages/recent.astro:7-108.
graph LR
FM["frontMatter isPaid"] --> Q{"isPaid === true ?"}
Q -- tidak --> LIST["tampil di / dan /recent"]
Q -- ya --> BADGE["badge Paid Tool di Card.astro"]
BADGE --> OTHER["tetap terbaca di /tags dan /alternative"]
style FM fill:#336791,color:#fff
style Q fill:#f59e0b,color:#000
style LIST fill:#2d7d46,color:#fff
style BADGE fill:#dc2626,color:#fff
style OTHER fill:#8b5cf6,color:#fff
%% fig: Cabang kurasi isPaid
%% desc: isPaid true mengeluarkan tool dari daftar utama dan memunculkan badge Paid Tool, tetapi berkasnya tetap terbaca di halaman tag dan alternatif.Card.astro menyiapkan badge Paid Tool untuk setiap tool yang isPaid benar src/components/Card.astro:18-259. Halaman tag dan halaman alternatif membaca getCollection('tools') tanpa filter, jadi tool berbayar tetap muncul di sana src/pages/tags/[slug].astro:8-10 src/pages/alternative/[slug].astro:8-9.
⚠️
isPaid: truebukan penghapusan. Berkasnya tetap ada di collection dan tetap terbaca di halaman tag serta halaman alternatif; hanya daftar utama yang menyembunyikannya. src/pages/index.astro:8-117
Tumpukan Astro
Proyek berjalan di atas Astro 4 dengan Tailwind sebagai satu-satunya integrasi. Versi yang dipakai adalah batas bawah caret pada package.json.
| Paket | Versi | Peran |
|---|---|---|
astro | ^4.3.2 | framework inti: routing berkas, content collection, astro build |
@astrojs/check | ^0.4.1 | pemeriksaan tipe yang dipanggil sebelum build |
@astrojs/tailwind | ^5.1.0 | integrasi Tailwind untuk Astro |
tailwindcss | ^3.4.1 | utility CSS |
sass | ^1.70.0 | preprocessor untuk berkas gaya |
typescript | ^5.3.3 | tipe untuk skrip frontmatter |
| Script | Perintah | Guna |
|---|---|---|
dev | astro dev | server pengembangan |
start | astro dev | alias dari dev |
build | astro check && astro build | cek tipe lalu build produksi |
preview | astro preview | pratinjau hasil build |
astro | astro | akses CLI Astro |
Repositori memakai yarn 1.22.18 sebagai package manager. package.json:512 Script build merangkai astro check di depan astro build, sehingga kegagalan tipe menghentikan build; urutan itu dan konfigurasi deploy dijelaskan di Build, Pemeriksaan Tipe, dan Deploy. Integrasi Tailwind didaftarkan di array integrations pada astro.config.mjs:5-813, sementara struktur tampilan dan temanya dibahas di Layout, Sidebar, dan Tema.
Peta rute
Situs ini kecil: enam rute dinamis dan statis menutup seluruh fitur, dan semuanya membaca collection yang sama.
| Rute | Berkas | Isi |
|---|---|---|
/ | src/pages/index.astro | daftar tool gratis dalam urutan acak, dengan kotak pencarian |
/recent | src/pages/recent.astro | tool gratis diurutkan dari createdAt terbaru |
/tags/:tag | src/pages/tags/ | satu halaman per tag unik |
/alternative/:slug | src/pages/alternative/ | tool lain yang berbagi tag dengan satu tool |
/favorites | src/pages/favorites.astro | tool yang disimpan pembaca |
/submit | src/pages/submit.astro | form yang berakhir di pull request |
/about | src/pages/about.astro | penjelasan proyek dan maintainer |
Tiga halaman menutup fitur yang tidak terlihat dari tabel: Beranda dan Pencarian Klien untuk penyaring teks di sisi klien, Halaman Recent dan Pengurutan untuk urutan tanggal, dan Penelusuran Tag untuk indeks tag. Dua halaman turunan punya alur sendiri: Halaman Alternatif per Tool dan Fitur Favorit di Local Storage. Rute /submit dijelaskan di Alur Form Submit ke Pull Request.
/about tidak menyentuh collection sama sekali. Halaman itu hanya menyusun teks statis di dalam Layout dan menyalakan noIndex={true} agar mesin pencari melewatkannya. src/pages/about.astro:11-1514