Ecommerce Template
Next.js·React 등으로 만든 최신 전자상거래 템플릿
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기We are building a platform that will help improve youth access to job opportunities, and make it easier for employers to find talent
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
• The public site (this folder's root) — plain static HTML/CSS/JS, no
build step, no framework, installable as a PWA (manifest + service
worker) and tuned for mobile-first use, since ~90% of the target market
is on smartphones. Still concierge-flavoured: curated shortlists,
staff-reviewed verification, intake forms rather than self-service
search — the front door for people who haven't signed up yet.README 전문 보기 ↗Four parts now:
platform/ — the self-service marketplace app (Next.js): accounts,
login, onboarding, opportunity search and applications, offers,
contracts, milestones, messaging, disputes, timesheets, and a fully
simulated payment flow (invoices, receipts, mobile-money/card checkout).
This is where the "prove the model, then open self-service" sequencing
from the blueprint actually lands — see platform/README.md.backend/ — Supabase (Postgres + Auth + Storage + Row Level
Security) plus a small Node/Express API for staff-only operations.
Implements the full self-service-marketplace data model from the
AdorWorks Startup & Website Blueprint §7.9 and is what both the public
site's intake forms and platform/ write into.staff/ — the internal console staff use to triage, verify,
moderate and oversee everything above.This is a separate product from Adormedia and is meant to be deployed as its
own Cloudflare Pages site — see "Deploy" below; platform/ deploys
separately (see its own README) since it's a Next.js app, not a static site.
Built:
manifest.webmanifest, sw.js, offline.html,
an install-prompt banner) and audited for mobile touch targets, iOS
safe-areas, and the sticky-header/anchor-scroll bug that's easy to miss
(see css/styles.css's scroll-padding-top).js/supabase-config.js is filled in (see backend/supabase/README.md)
— already the case in production. A Netlify Forms fallback still exists
in the code for completeness but is unreachable now that Netlify itself
is retired (see "Deploy" below).backend/supabase/) and a staff-console
API (backend/api/) for verification, shortlisting, engagement
tracking and manual finance records — see backend/README.md.css/themes.css and img/.jobs-projects.html and
impact-stories.html both say plainly that there's nothing to show yet,
per the blueprint's evidence standards (§9.4) — no fake listings, no
fabricated testimonials or stats.staff/) for everything the API supports: triaging
intake submissions and converting them into real accounts, verifying
talent and organisations, building each opportunity's shortlist,
overseeing contracts and finance records, and resolving disputes. See
staff/README.md.platform/): login, dashboard,
self-service opportunity search and applications, offers and contract
lifecycle (milestones, deliverables, revisions), in-platform messaging
with attachments, timesheets, disputes, verified work history, and
two-sided reviews. See platform/README.md for the full feature list
and its "Security notes" section for how the authorization model works.platform/: invoices raised
automatically on milestone approval, a swappable payment-provider
interface (mock m-Gurush, MTN MoMo and card implementations), receipts,
and staff-side reconciliation — see backend/README.md's "What's
deliberately NOT here" section for what this is and isn't.platform/e2e/, platform/src/**/*.test.ts,
backend/api/src/**/*.test.js) and a CI workflow (.github/workflows/ci.yml)
that runs lint, unit tests and a production build on every push.Not built yet:
backend/README.md's note on when a native app would earn its cost.
platform/ itself is deliberately online-only (not offline-first) —
every core action there has to reach the server to mean anything, so a
full offline sync layer isn't the right trade for a marketplace app the
way it is for the mostly-static public site.docs/governance/decision-log.md's Stage 13 entry. What's still
genuinely Content pending: a real phone/WhatsApp number, and
trust-safety.html's dedicated safeguarding reporting channel — both
deliberately left unpublished until there's someone to actually staff
and monitor them, not an oversight.is_simulated to
false anywhere in the codebase; no payment gateway is integrated, per
the blueprint's compliance-first rule pending a licensed local payment
partner.about.html and in the footer copyright line on every
page — remove both once clearance is confirmed.robots.txt, sitemap.xml, canonical/OG/Twitter tags and the
JSON-LD on index.html now point at the real live domain,
adorworks.pages.dev (moved from adorworks.netlify.app after Netlify's
free-tier usage limit took the site down — see "Deploy" below) — update
all of these again once a custom domain is cleared and live.contact.html's and trust-safety.html's WhatsApp/phone number and
the dedicated Trust & Safety reporting channel, both still marked
Content pending until there's someone to actually staff and monitor
them.Cloudflare Pages (current):
AdorWorks repo.None, Build command
node build-cf-pages.mjs, Build output directory _site, Root
directory blank (repo root).build-cf-pages.mjs copies only the files this site needs to serve
(every top-level *.html, css/, js/, img/, staff/,
manifest.webmanifest, sw.js, robots.txt, sitemap.xml,
_headers, _redirects) into _site/ — the actual deploy output —
so backend/, platform/, docs/, .github/ and repo-management
files are never uploaded as deployable assets at all. This isn't
optional cleanliness: a Cloudflare Pages redirect does not reliably
override a request whose path matches a real uploaded file (confirmed
live, not just from docs), so relying on _redirects alone to block
those paths after the fact was found not to work.js/supabase-config.js already has
the public URL/key committed. Forms submit directly to Supabase
client-side; there's no server-side form handling to configure.Netlify (retired): the site was originally deployed there, but its
free-tier usage limit took the whole site down for real visitors — every
page returned Netlify's own "usage_exceeded" 503 — which is what
prompted the move to Cloudflare Pages above. netlify.toml is gone;
_headers/_redirects are what its [[headers]]/[[redirects]] were
translated from, and are now the only copy. The six forms still carry
data-netlify="true" markup (harmless no-op on Cloudflare) and
js/main.js still has a submitToNetlify fallback for completeness, but
that path is dead code in production — Supabase is configured, so
submitToSupabase is what actually runs.
npx serve .
# or
python -m http.server 8080
index.html Home
services.html Services (packaged deliverables + service request)
jobs-projects.html Jobs & Projects (honest "no listings yet" state)
for-employers.html For Employers (categories, hiring modes, verification, brief form — the one real employer-intake pipeline)
for-talent.html For Talent (verification tiers + application form)
how-it-works.html How It Works (both journeys, step by step)
trust-safety.html Trust & Safety (verification, payments, disputes)
pricing.html Pricing (fee model; talent side is always free)
impact-stories.html Impact & Stories (case-study method, empty for now)
about.html About (mission, Adormedia relationship, values)
insights.html Insights (coming-soon + notify-me form)
contact.html Contact (general enquiries)
css/themes.css AdorWorks brand palette as CSS custom properties
css/styles.css Shared layout, components, utilities
js/main.js Nav toggle, analytics hooks, PWA install prompt, form submit
js/supabase-config.js Public Supabase URL + anon key (fill in; not secret)
img/ Logo SVGs + generated PWA icons (img/icons/)
manifest.webmanifest PWA manifest
sw.js Service worker (offline shell caching)
offline.html Shown when a page isn't cached and there's no connection
404.html
robots.txt, sitemap.xml
_headers, _redirects Cloudflare Pages security headers + redirects
backend/supabase/ Database schema, RLS policies, storage buckets (see backend/README.md)
backend/api/ Staff-console Node/Express API
staff/ Staff console web UI (see staff/README.md) — noindex'd, login-gated
render.yaml Render Blueprint for deploying backend/api
js/main.js's beforeinstallprompt listener). iOS Safari has no such
event — install there is manual, via the Share sheet → "Add to Home
Screen"; there's no code path to trigger it programmatically.sw.js precaches every page plus the CSS/JS/icon shell on
first visit, so previously-viewed pages keep working with no
connection; offline.html is the fallback for anything not cached.
Form submissions are never intercepted by the service worker (only
GET requests are) — no connection means no submission, by design,
rather than a silently-queued write that might never actually send.CACHE_VERSION in sw.js whenever you change a cached file
(any CSS/JS/HTML in SHELL_URLS) — otherwise visitors with the site
already installed keep serving the old cached copy indefinitely.img/icons/*.png were rasterized from
img/adorworks-mark.svg (a one-off Node + sharp script, not checked
in) — regenerate at the same sizes (192/512 "any", 192/512 "maskable"
with ~52% icon-to-canvas ratio for safe-zone padding, 180 apple-touch)
if the mark ever changes.Full setup instructions live in backend/README.md. Short version:
backend/supabase/migrations/ (paste into the SQL Editor, in order).js/supabase-config.js with your project's URL and anon key
— the six public forms then write straight into intake_submissions.cd backend/api && npm install, fill in .env from .env.example
(this one needs the secret service_role key), npm start — this
is what a future staff console would call to review submissions,
verify people/organisations, build shortlists and track engagements.Single palette (no per-page theme switching, unlike the Adormedia site):
Midnight #182230 (primary/text), Opportunity Teal #00A88F (primary
action colour), Talent Violet #5B4BDB (secondary accent), Energy Coral
#FF6B4A (sparing highlight only), Cloud #F4F7FB (background), Slate
#596274 (muted text). Headings and the wordmark use Manrope (loaded from
Google Fonts), matching the delivered logo files in img/.
js/main.js pushes events to window.dataLayer for every form submission
(event name adorworks_event, action form_submit with a form_id).
js/analytics.js (Stage 9) turns these into real Google Analytics 4 events,
consent-gated: every page defaults Google's Consent Mode to fully denied,
shows a cookie banner on first visit, and only loads gtag.js — and only
after a visitor actively accepts — if a Measurement ID is configured.
To turn analytics on: create a GA4 property (analytics.google.com ->
Admin -> Data Streams -> your web stream), copy its Measurement ID
(G-XXXXXXXXXX), and set window.ADORWORKS_GA_MEASUREMENT_ID in
js/analytics-config.js. Leaving it blank (the default) keeps analytics
fully inert regardless of what anyone clicks in the cookie banner — same
"no ID, no live calls" pattern as the payment-provider scaffolding in
platform/.