NebulaeWebsite hội nghị
Website hội nghị trọn bộ: chòm sao sống động, thẻ tên nghiêng theo con trỏ, lịch biết phiên nào đang diễn ra, và giá vé cộng dồn ngay khi bạn bấm
Chưa mở bán
Sản phẩm này sắp mua được. Để lại email, tiệm báo bạn ngay khi mở bán.
- Trả một lần, dùng trọn đời
- Cập nhật miễn phí trọn đời
- Đủ mã nguồn: HTML / CSS / JS + React
Đang chạy trực tiếp
Giới thiệu
Website cho một hội nghị muốn người tham dự cảm nhận được không khí trước khi đặt chân đến. Nebulae là hội nghị lập trình viên ba ngày ở Reykjavík (hư cấu), và cả trang xoay quanh một ý: bầu trời cũng là một phần của chương trình. Hero là chòm sao sống động, và tấm thẻ tên treo giữa đó in đúng cái tên bạn gõ.
- Bầu trời canvas với những ngôi sao trôi chậm, đường nối đuổi theo con trỏ và một xung ánh sáng chạy dọc chòm sao Nebulae
- Thẻ tên nghiêng theo con trỏ, đung đưa trên dây đeo và mang theo đồng hồ đếm ngược đến giờ mở cửa, số ghế và mã vạch sinh ra từ tên bạn
- Lịch biết bây giờ là mấy giờ: phiên được đánh dấu đang diễn ra và sắp tới, ngày phù hợp tự mở ra, và một dải thông báo cho biết đang có gì
- Gắn sao cho phiên bạn muốn xem; "Lịch của tôi" nhớ chúng trong trình duyệt và chỉ hiện những phiên đó
- Mười hai diễn giả với chân dung tạo bằng CSS và hộp thoại chi tiết, liên kết mỗi bài nói về đúng khung giờ của nó, và ngược lại
- Bốn hạng vé có nút tăng giảm, tổng tiền cập nhật tức thì và giá early bird tự hết hạn
- Đồng hồ demo nhảy tới trước, trong và sau sự kiện, để bạn thấy mọi trạng thái trước khi đưa lên
- Nội dung mẫu chân thật cho một hội nghị giả định, sẵn sàng thay bằng của bạn
Có hai bản. Bản HTML là một trang mở và sửa được bằng trình soạn thảo bất kỳ, đưa lên hosting nào cũng chạy. Bản React là dự án Vite + TypeScript hoàn chỉnh: mọi chữ, giờ, tên và giá nằm trong một file content.ts, chạy bằng npm install && npm run dev.
Tính năng · 15
- Trọn một website: header, hero chòm sao, lịch ba ngày, lưới diễn giả, các hạng vé, địa điểm, nhà tài trợ, FAQ, footer
- Hai bản: HTML/CSS/JS tĩnh sửa trực tiếp, và một dự án Vite + React + TypeScript chạy được ngay
- Bầu trời hero vẽ trên canvas: sao trôi chậm, đường nối đuổi theo con trỏ và một xung ánh sáng chạy dọc chòm sao Nebulae; tạm dừng khi cuộn khỏi màn hình và chỉ vẽ một khung tĩnh khi bật giảm chuyển động
- Thẻ tên nghiêng theo con trỏ và in đúng tên người xem gõ vào, kèm số ghế và mã vạch sinh ra từ tên đó, phía trên là đồng hồ đếm ngược đến lúc mở cửa
- Lịch có tab theo ngày, bộ lọc theo track và dải thông báo trực tiếp; phiên được đánh dấu đang diễn ra và sắp tới dựa trên một đồng hồ có thể tiêm vào, nên mọi trạng thái đều kiểm thử được
- Lịch của tôi: gắn sao cho phiên muốn xem, chỉ xem những phiên đã lưu; được nhớ bằng localStorage và rơi về bộ nhớ tạm khi trình duyệt chặn lưu trữ
- Mười hai diễn giả với ảnh chân dung tạo bằng CSS và hộp thoại chi tiết; mỗi bài nói liên kết về đúng chỗ trong lịch, và mỗi tên trong lịch mở ra diễn giả đó
- Hạng vé có nút tăng giảm số lượng, tổng tiền cập nhật tức thì, giá early bird tự hết hạn, một hạng đã bán hết và nút thanh toán mang theo đơn hàng
- Đồng hồ demo: nhảy tới trước sự kiện, giữa hội nghị hoặc sau khi kết thúc để xem từng trạng thái, rồi xoá một khối là chạy theo giờ thật
- Toàn bộ chữ, giờ, diễn giả, vé, nhà tài trợ và FAQ nằm trong một file content.ts có kiểu; thời điểm chính xác của mỗi phiên suy ra từ giờ tại địa điểm và một độ lệch UTC
- Giao diện sáng và tối: theo hệ thống, nhớ lựa chọn của người xem; mọi màu, font, bo góc và thời gian chuyển động đều là CSS custom property
- Thương hiệu hư cấu gốc, chân dung tạo bằng CSS và logo SVG riêng: không ảnh phải mua bản quyền, không web font, không gọi ra ngoài
- Responsive từ điện thoại 320 px tới màn hình rộng
- Script và stylesheet cộng lại chỉ khoảng 20 KB sau gzip
- Không phụ thuộc thư viện nào ngoài React ở bản React
Cách dùng
Mở index.html bằng trình soạn thảo: mọi chữ trên trang đều viết ngay trong đó, nên công cụ tìm kiếm đọc được. Nó liên kết hai file nằm cạnh:
<link rel="stylesheet" href="nebula-conf.css" />
<script src="nebula-conf.js" defer></script>- Phiên: sao chép một
<li class="nc-session" data-session …>cho mỗi phiên. Script đọcid,data-track(main,signal,orbit,lab, hoặcallcho giờ nghỉ và sự kiện chung),data-kind(keynote,talk,workshop,break,social),data-title,data-time(chữ mà dải thông báo nói), vàdata-start/data-endlà thời điểm ISO kèm độ lệch múi giờ, ví dụ2026-11-12T09:30:00+00:00. Đặt phiên vào khung (data-slot) của giờ bắt đầu và panel (data-day-panel) của ngày đó. - Diễn giả: mỗi thẻ là một nút có
data-speaker-open="id"và một khối ẩndata-speaker-detail="id"để hộp thoại sao chép. Tên ở bất kỳ đâu trên trang sẽ mở cùng hộp thoại nếu nút của nó có cùngdata-speaker-open. - Bài nói trong hộp thoại liên kết tới lịch bằng
data-session-link="session-id". - Vé: một hạng vé là
<li data-tier="id" data-price="22900" data-early-price="14900" data-early-until="2026-10-31T23:59:00+00:00" data-max="10">. Giá tính bằng cent; đơn vị tiền làdata-currencytrêndata-tickets. Thêmdata-sold-outđể khoá một hạng. Nút thanh toán là liên kết thường; đơn hàng được thêm vào dạng?tickets=stargazer:2,navigator:1. - Chữ do script viết ra (dải thông báo, thông báo trạng thái, nhãn) là mẫu nằm trong các thuộc tính
data-text-*, ví dụdata-text-live="Live now: {titles}.". Đổi chúng ngay trong HTML; script chỉ điền{count},{titles},{time},{when},{shown}và{total}.
Script nối mọi thứ theo thuộc tính data khi trang đã tải xong. Với markup bạn thêm sau, gọi NebulaConf.init(container); hàm trả về một hàm để hoàn tác. Mã nguồn dễ đọc nằm trong src/ (src/core/ có một module nhỏ cho mỗi hành vi) nếu bạn muốn build lại.
Mọi thứ phụ thuộc vào thời gian — đang diễn ra và sắp tới, dải thông báo, đếm ngược, giá early bird — đều hỏi một đồng hồ, không bao giờ gọi Date.now() trực tiếp. Trong bản demo, <main data-clock-start="2026-10-24T09:00:00+00:00"> cho trang chạy từ một thời điểm trong tháng Mười, và khối Demo clock trong lịch nhảy quanh thời điểm đó.
Trước khi ra mắt, hãy xoá cả hai: bỏ data-clock-start khỏi <main> và khối <div data-clock-controls>. Khi đó trang chạy theo giờ của từng người xem. Với React, đặt DEMO_CLOCK thành null trong content.ts là cả hai cùng biến mất. Muốn chạy theo đồng hồ riêng trong code, truyền một đồng hồ vào hành vi: createSchedule(element, { clock }) với clock từ createClock({ start, speed }).
Giờ của phiên là giờ treo tường tại địa điểm cộng một độ lệch (EVENT.utcOffset trong React; độ lệch trong mỗi data-start ở HTML), nên "đang diễn ra" luôn đúng dù người xem ở đâu.
Bản tải về là một dự án Vite + React 19 + TypeScript hoàn chỉnh:
npm install
npm run dev # http://localhost:5173
npm run build # file tĩnh trong dist/src/app/content.ts— mọi chữ, phiên, diễn giả, hạng vé, nhà tài trợ và câu hỏi. Sửa ở đây là trang theo ngay. Giờ của phiên viết theo giờ địa điểm ("09:30").src/app/sections/— mỗi section một component;src/app/ui/— các mảnh nhỏ hơn chúng dùng chung;src/app/lib/— những gì suy ra từ nội dung (khung giờ, thời điểm chính xác, các con số ở hero).src/core/— hành vi (theme, menu, tabs, lịch, agenda, vé, modal, bầu trời, thẻ tên, đếm ngược, đồng hồ…), chính là mã mà bản HTML chạy, gắn vào bằng hookuseBehaviour.src/nebula-conf.css— một stylesheet chung cho cả hai bản.
Các phiên đã gắn sao được lưu trong localStorage dưới khoá nebula-conf-agenda dạng danh sách id phiên; id nào trang không còn thì bị bỏ. Khi trình duyệt từ chối lưu trữ (cửa sổ riêng tư, iframe sandbox), lịch vẫn dùng được cho đến khi đóng trang. Thay đổi ở một tab sẽ hiện sang các tab khác.
Mọi thứ là custom property trên :root, ở đầu nebula-conf.css. Màu viết dạng light-dark(sáng, tối), nên một dòng lo cả hai giao diện.
| Property | Thay đổi gì |
|---|---|
--nc-bg, --nc-bg-raised, --nc-text, --nc-muted, --nc-line |
Màu trang, thẻ và chữ, đường kẻ mảnh |
--nc-violet, --nc-magenta, --nc-cyan, --nc-mint, --nc-amber |
Năm ánh sáng cực quang: điểm nhấn, trạng thái, track |
--nc-track-main, --nc-track-signal, --nc-track-orbit, --nc-track-lab |
Mỗi track một màu; thêm track bằng [data-track="…"] { --track: … } |
--nc-star, --nc-link, --nc-glow |
Thứ canvas hero vẽ: sao, đường nối, quầng sáng chòm sao |
--nc-cta-a, --nc-cta-b, --nc-on-cta, --nc-focus, --nc-live |
Gradient và chữ của nút chính, viền focus, trạng thái đang diễn ra |
--nc-glow-strength |
Độ mạnh của quầng sáng nền (đặt theo từng giao diện) |
--nc-font-display, --nc-font-body, --nc-font-mono, --nc-display-weight |
Các vai trò chữ |
--nc-radius-lg, --nc-radius, --nc-radius-sm, --nc-max, --nc-gutter |
Hình dạng và bố cục |
--nc-ease, --nc-reveal-duration |
Chuyển động |
Font: trang chỉ dùng font hệ thống nên không tải gì. Muốn dùng font riêng, thêm @font-face (hoặc stylesheet của dịch vụ font) rồi đặt, ví dụ, --nc-font-display: "Your Display", sans-serif;.
Giao diện: data-theme="light" hoặc "dark" trên <html> cố định giao diện ban đầu; không có thì theo hệ thống của người xem. Nút chuyển nhớ lựa chọn trong localStorage (nebula-conf-theme).
Cả hai bản đều là file tĩnh: đưa thư mục HTML, hoặc dist/ của dự án React sau npm run build, lên Netlify, Vercel, Cloudflare Pages, GitHub Pages hay hosting bất kỳ. Trỏ nút thanh toán tới dịch vụ bán vé của bạn; bản thân website không bán gì.
Hỏi về sản phẩm này
Chưa chắc có hợp dự án của bạn? Cứ hỏi — câu trả lời lấy từ chính trang này.
Lịch sử phiên bản
1.0.0First releaseMới nhất
A complete conference site in two builds: static HTML/CSS/JS and a Vite + React + TypeScript project. Living constellation hero with a tilting name badge and countdown, three-day schedule with tracks, live and next marks and a saved agenda, speaker grid with an accessible detail dialog, ticket tiers with a live total and early-bird pricing, venue, sponsors, FAQ, light and dark themes.
- Bản sửa lỗi và tính năng mới đều có ngay ở nút tải này — file tải về luôn là bản mới nhất.



