Wocart
Wocart runs the whole cash-on-delivery business for Algerian stores: an Arabic-first checkout, phone verification, Yalidine, ZR Express, NOEST, Guepex and 82 EcoTrack couriers, your own drivers, and M
GreenStore — Azərbaycanda bitkilər, bağ məhsulları və landşaft xidmətləri üçün açıq elan platforması.
Translation pending
CommerceGitHub @HuseynovRuslanOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗GreenStore is the frontend of an Azerbaijani classifieds marketplace for plants, trees, garden products and landscaping services. Individuals and businesses publish ads, and buyers contact sellers directly. It works like Turbo.az: there is no cart and no checkout.
It is built from the approved Figma design:
FIGMA_AUDIT.md covers the screens, tokens, assets, data and known gaps.IMPLEMENTATION_REPORT.md covers the original React + Vite build and how it was verified.MIGRATION_PLAN.md and MIGRATION_REPORT.md cover the move to the
Next.js App Router.SEO_ARCHITECTURE.md covers rendering, canonical and indexing rules, structured data, the
sitemap and robots.txt.Demo build — not indexable. There is no backend yet. All listings, sellers, services, people, phone numbers and statistics are sample data copied from the Figma design (
src/data/). Login and registration are simulated in the browser: any well-formed input signs in to the demo seller account, nothing is sent to a server, and everything a visitor changes is kept only in that browser'slocalStorage. A "Demo versiya" banner says so on every page. While the data is sample data, every page isnoindex, robots.txt disallows crawling, and the sitemap is empty (seesrc/seo/env.ts).
@tailwindcss/postcss. The design tokens live in src/styles/index.css under @theme.lucide-react icons. Every icon in the design is a Lucide glyph.@fontsource/inter.npm ci # Node 22 (see .nvmrc / "engines")
npm run dev # http://localhost:3000
npm run build # production build (includes the TypeScript check)
npm start # serve the production build on :3000
npm run typecheck
npm run lint # ESLint (eslint-config-next: core-web-vitals + typescript)
npm test # vitest run
CI (.github/workflows/ci.yml) runs npm ci, lint, typecheck, the unit tests and the production build on every pull
request and on pushes to main.
None are required. Copy .env.example to .env.local to override them locally.
| Variable | Default | Purpose |
|---|---|---|
NEXT_PUBLIC_SITE_URL | Vercel URL, else http://localhost:3000 | Public origin for canonical URLs, Open Graph, the sitemap and robots.txt |
NEXT_PUBLIC_DEMO_MODE | true | "Demo versiya" banner |
SEO_INDEXABLE | false | Indexing opt-in. It only takes effect together with DATA_SOURCE ≠ mock |
DATA_SOURCE | mock | mock: Figma sample data. api: the future Web API repository, not implemented yet |
src/
app/ Next.js routes: route groups (home)/(main)/(auth)/(workflow)/(admin), layouts, metadata,
robots.ts, sitemap.ts, not-found pages
views/ page bodies rendered by the routes (server components, plus client pages for private areas)
components/ ui/ (Button, Badge, Field, Panel, Notice, Dialog, Pagination…), cards/,
layout/ (header, footer, frames, ClientGate + loading frames)
features/ page-specific components and client islands, grouped by area
(home, search, listing, seller, services, account, post-ad, admin, contact)
services/ data-access boundary: MarketplaceRepository interface + mock implementation, query helpers
state/ client state: favourites, demo session and submitted ads (localStorage, hydration-safe)
seo/ switches (env.ts), metadata, catalogue indexing rules, JSON-LD, sitemap/robots builders
data/ typed sample data copied from the Figma file
lib/ formatting (₼ prices, Azerbaijani dates, collation), pagination and search-param helpers
types/ domain types (Listing, Seller, Service, Category…)
styles/ Tailwind entry + design tokens
public/images/ product, service and seller photos exported from Figma (WebP)
docs/figma/ Figma reference renders + image manifest (Figma node → file)
| Path | Screen | Rendering |
|---|---|---|
/ | Home page (Ana səhifə) | static |
/elanlar | Product catalogue. Filters live in the query string: q, kateqoriya, alt, seher, min, max, nov, hundurluk, yas, vip, catdirilma, saticiNovu, siralama, gorunus, sehife | server, per request |
/kateqoriyalar/:kateqoriya, /kateqoriyalar/:kateqoriya/:seher | Category page and category × city page (same catalogue UI) | server, per request |
/elanlar/:slug | Listing detail | prerendered for every active listing |
/saticilar/:slug | Seller profile | server, per request |
/xidmetler, /xidmetler/:slug | Services catalogue and service detail | per request / prerendered |
/daxil-ol, /qeydiyyat | Login and registration (mock session) | private, noindex |
/kabinet, /kabinet/profil, /secilmisler | Cabinet, profile and favourites | private, rendered in the browser |
/kabinet/elanlar/:slug | Owner preview of the seller's own unpublished listings (pending, expired, or posted in this browser) | private, noindex, rendered in the browser |
/elan-yerlesdir[/:step], /elan-yerlesdir/gonderildi | 6-step ad posting wizard and its confirmation | private, rendered in the browser |
/idareetme, /idareetme/moderasiya, /idareetme/kateqoriyalar, /idareetme/sikayetler | Moderation tools (demo) | private, noindex |
This is the beginning of the README. Read the rest at the original. Read the full README ↗