The CFP website for SITCON 2027 (Students' Information Technology Conference / 學生計算機年會). It introduces the conference and its session formats, helps prospective speakers choose how to participate, and provides routes for submission information.
Work in progress: the homepage is partially implemented. Session details, submission forms, and About sections are scaffolded with placeholders; submissions cannot be sent yet. Some destinations are still undecided, and the submission deadline is not configured.
Requirements:
- Node.js 22.12 or newer.
.nvmrcselects Node 22 for nvm users. - pnpm 10 or newer.
package.jsonpinspnpm@10.20.0. Installation with npm, yarn, or bun is blocked.
From the repository root:
# If you use nvm:
nvm install
nvm use
pnpm install
pnpm devOpen the local URL printed by Vite. Local development requires no environment variables or backend service.
src/content.json is the single source for all website copy
and outbound URLs. It includes button and link labels, image alt text,
accessibility labels, placeholders, dates, calendar event titles, and browser
metadata. The HTML title is injected from metadata.title by Vite during both
development and builds.
To update content:
- Find the relevant section, such as
hero,site_footer, orsessions. - Edit values while preserving the JSON structure. Keep named placeholders such
as
{title}and{year}intact; components substitute their values. - Run
pnpm check, then review the result withpnpm dev.
Keep complete sentences in JSON and markup in React. Do not introduce a second copy file or hardcode website text in TS, TSX, or HTML. Technical route paths, anchors, and state identifiers may remain in code.
For the event date, hero.dateTime uses YYYY-MM-DD; hero.date is the displayed
label. The submission countdown currently has a separate, unset DEADLINE in
submission-deadline.tsx, so changing
the displayed copy alone does not enable the countdown or calendar link.
The design source is
Figma — SITCON 2027 CFP 網站
(homepage node 122-336). Detailed implementation rules and token tables are in
AGENTS.md.
- Use Base UI for interactive controls. Our primitives wrap
@base-ui/reactwith custom Tailwind styles. Version-matched component docs are available atnode_modules/@base-ui/react/docs/react/components/<name>.md. Style links withbuttonVariants()rather than rendering an anchor through Base UI's Button. - Use design tokens. Colors, typography, radii, and dimensions come from the
@themeblock insrc/index.css; Tailwind's default colors, type scale, and radii are reset. Arbitrary size and color values are forbidden. - Map Figma values by role. Desktop tokens render at roughly 75% of the Figma
scale, with mobile overrides. For spacing, write Figma pixels divided by four
(
20px→p-5); the 3px spacing base applies the scaling. - Reuse tokens before adding them. New tokens need a Figma source, rem values,
any appropriate mobile override, and documentation in
AGENTS.md. Register new text sizes and named spacing sizes in the Tailwind merge configuration insrc/lib/utils.ts. - Preserve accessibility. Merge primitive classes with
cn()and use the shared focus ring:focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue. - Use the supplied artwork. Use
lucide-reactfor matching icons and export brand logos from Figma as SVGs intosrc/assets/. - Keep unfinished sections explicit. Use the shared
Placeholdercomponent for undesigned or WIP regions, with its label incontent.json.
pnpm check
pnpm build
pnpm previewPublish the contents of dist/ to a static host. The site uses client-side
routing, so configure the host to serve index.html for application paths such
as /sessions/general, /submit/demo, and /about when no static file matches.
This allows direct links and page refreshes to work. pnpm preview is for local
verification, not production hosting.
The dev branch deploys to https://2027-cfp-preview.sitcon.workers.dev
through Cloudflare Workers Builds in the SITCON Cloudflare account, configured by
wrangler.jsonc. Every other branch and pull request gets its
own preview URL, which Cloudflare posts as a comment on the pull request. Preview
deployments send X-Robots-Tag: noindex, nofollow, so search engines skip them.
They are not the production site.
MIT, copyright © 2026 SITCON.