Bu loyiha endi haqiqiy server-side SQL database bilan ishlaydi. Public sahifa backend API dan ma'lumot oladi, admin panel esa to'liq CRUD, upload va project blog/case-study kontentini boshqaradi.
portfolio/
├── admin.html # Admin panel UI
├── css/
│ ├── admin.css # Admin panel stillari
│ └── style.css # Public sahifa stillari
├── data/
│ ├── portfolio.db # SQLite database (runtime da yaratiladi)
│ └── site.json # Dastlabki seed ma'lumot
├── index.html # Bosh sahifa
├── js/
│ ├── admin.js # Admin CRUD + upload + editor logikasi
│ └── main.js # Public sahifa render logikasi
├── project.html # Project blog / case-study detail page
├── server/
│ ├── auth.js # JWT auth helperlar
│ ├── db-schema.sql # SQLite schema
│ ├── db.js # SQL access layer
│ └── helpers.js # Payload normalize helperlar
├── server.js # Express app entry point
├── uploads/ # Yuklangan rasmlar
├── package.json # Dependencies va scripts
├── .env.example # Production environment namuna
└── README.md # Hujjat
- Backend: Node.js + Express
- Database: SQLite (
better-sqlite3) - Auth: JWT
- Uploads: local
uploads/ - Frontend: HTML + CSS + Vanilla JS
Projectlar hozir quyidagi maydonlarni saqlaydi:
titlecategorysummaryimageUrlcontent(Markdown blog/case study)metricsstacklinksfeatured
npm install
npm run devProduction:
npm startServer default http://localhost:4000 da ishlaydi.
- Public site:
http://localhost:4000/ - Project detail:
http://localhost:4000/project?id=project-churn - Admin panel:
http://localhost:4000/admin - Health check:
http://localhost:4000/api/health
Admin panel orqali:
- Profile update
- Stats update
- Skills CRUD
- Projects CRUD
- Links CRUD (social/contact)
- Image upload
- Project markdown content yaratish va edit qilish
- Upload qilingan rasm path ni content ichiga Markdown image sifatida kiritish
GET /api/public/sitePOST /api/admin/loginGET /api/admin/sitePUT /api/admin/profilePUT /api/admin/statsPOST /api/admin/uploadGET /api/admin/:collectionPOST /api/admin/:collectionPUT /api/admin/:collection/:idDELETE /api/admin/:collection/:id
Collection qiymatlari:
skillsprojectssocialLinkscontactLinks
.envni serverda saqlang va kuchliJWT_SECRETishlating- Nginx reverse proxy + HTTPS qo'ying
uploads/vadata/portfolio.dbni backup qiling- Agar katta trafik bo'lsa S3/object storage va alohida DB serverga o'ting