PawnGuard/hack2dawn-front-end

GitHub: PawnGuard/hack2dawn-front-end

一个基于 Next.js 的前端项目,为 CTF 场景提供结构化的页面与组件化界面。

Stars: 1 | Forks: 0

Hack2Dawn Front-end

Next.js Tailwind CSS TypeScript DedSec Certified

## 📋 目录 - [🚀 快速开始](#-quick-start) - [🛠 技术栈](#-tech-stack) - [📂 项目结构](#-project-structure) - [📐 项目规范](#-convenciones-del-proyecto) ## 🚀 快速开始 按照以下步骤,在 5 分钟内运行项目。 ### 前置条件 - Node.js 20+(推荐:使用 `nvm`) - npm 10+ ### 安装说明 1. **克隆仓库:** git clone https://github.com/PawnGuard/hack2dawn-front-end.git cd hack2dawn-front-end 2. **设置环境变量:** cp .env.example .env # 打开 .env 文件并填写所需的密钥 3. **安装依赖项:** npm install 4. **启动开发服务器:** npm run dev # 用于本地运行 npm run dev --host # 如果您想在手机或电脑上查看,请使用此命令在您的网络中访问 访问 [http://localhost:3000](http://localhost:3000) 查看应用程序。 ## 🛠 技术栈 本项目使用现代的、基于组件的架构。 | 类别 | 技术 | 用途 | | :--- | :--- | :--- | | **核心** | Next.js 14 (App Router) | Fullstack React 框架 | | **样式** | Tailwind CSS | 实用优先的设计系统 | | **语言** | TypeScript | 严格的静态类型检查 | ## 📂 项目结构 ### 总体结构(未更新) ``` ├── app → Todas las páginas del proyecto (Next.js App Router) │ ├── (app) → Páginas privadas (requieren autenticación) │ ├── (public) → Páginas públicas (landing page, login, registro, etc.) │ ├── globals.css → Estilos globales de la aplicación │ ├── layout.tsx → Layout raíz de la aplicación │ └── not-found.tsx → Página 404 personalizada │ ├── components → Todos los componentes reutilizables de React │ ├── icons → Iconos en formato de componente React (convertir SVGs aquí y exportarlos en index.ts) │ ├── shared → Componentes usados en más de una página (Footer, Banner, Navbar, etc.) │ └── ui → Componentes genéricos de interfaz (botones, pills, inputs, modals, etc.) │ ├── data → Archivos de datos estáticos o configuración de contenido. │ └── footer.ts → Si necesitas editar el contenido del footer, hazlo aquí, NO en el componente. │ ├── lib → Utilidades, helpers y configuraciones del lado del cliente/servidor │ ├── auth.ts → Configuración y helpers de autenticación │ ├── ctf-state.ts → Estado global relacionado al CTF │ └── utils.ts → Funciones de utilidad general │ ├── public → Archivos estáticos públicos (imágenes, fuentes, etc.) │ ├── fonts → Fuentes tipográficas del proyecto │ └── lol → (descripción pendiente) │ └── types → Definiciones de tipos TypeScript compartidos en todo el proyecto ├── team.ts → Tipos relacionados a equipos └── user.ts → Tipos relacionados a usuarios ``` ### 页面结构 (app/) ``` app/ ├── (app)/ → Páginas privadas (requieren sesión activa) │ ├── api/ → API Routes del proyecto │ ├── challenges/ │ │ ├── page.tsx → Página principal de Challenges │ │ └── [slug]/ │ │ └── page.tsx → Página de detalle del Lab / Challenge (plantilla dinámica) │ ├── dashboard/ │ │ ├── layout.tsx → Layout compartido del dashboard │ │ ├── profile/ │ │ │ └── page.tsx → Página de perfil del usuario │ │ └── team/ │ │ ├── page.tsx → Página de dashboard del equipo │ │ └── select/ │ │ └── page.tsx → Página para unirse o seleccionar equipo (TeamUp) │ ├── home/ │ │ └── page.tsx → Página principal post-login (Home) │ └── layout.tsx → Layout de las páginas privadas │ └── (public)/ → Páginas públicas (sin autenticación requerida) ├── page.tsx → Landing page principal ├── login/ │ └── page.tsx → Página de inicio de sesión ├── register/ │ └── page.tsx → Página de registro de usuario ├── credits/ │ └── page.tsx → Página de créditos ├── faq/ │ └── page.tsx → Página de preguntas frecuentes ├── rules/ │ └── page.tsx → Página de reglas del CTF ├── scoreboard/ │ └── page.tsx → Página del scoreboard público └── layout.tsx → Layout de las páginas públicas ``` ## 📐 项目规范 ### 组件组织 最重要的规则是根据组件的范围决定其存放位置: 仅在单个页面中使用的组件 → 在该页面的文件夹内的 _components/ 子文件夹中创建 在 2 个或更多页面中使用的组件 → 将其移动到 components/shared/ 没有业务逻辑的通用 UI 组件(按钮、徽章、输入框) → 放在 components/ui/ 页面结构示例: ``` app/(app)/challenges/ ├── page.tsx └── _components/ ├── ChallengeCard.tsx → solo se usa en esta página └── ChallengeFilter.tsx → solo se usa en esta página ``` ### 数据管理 如果组件需要文本、链接、列表或其他可配置内容,请不要将其硬编码在组件内部。请在 data/ 目录下的文件中添加内容,并从那里导入。这样可以在不触及组件逻辑的情况下轻松进行更改。了解更多关于 ### 图标 当您向项目添加 SVG 图标时: 在 components/icons/ 中将其转换为 React 组件 从 components/icons/index.ts 中导出 切勿在组件中直接将 SVG 作为文件导入 — 始终使用生成的组件 ### 通用规则 不要将业务逻辑放入 components/ui/ 的组件中 — 它们仅用于展示展示 不要从 app/ 向 components/ 导入 — 依赖流向必须是单向的 如果需要在页面间共享状态,请使用 lib/ 集中管理该逻辑 在创建新组件之前,请检查 components/ui/ 或 components/shared/ 中是否已存在类似组件 ready v1.0.0
标签:Next.js, Syscall, Tailwind CSS, TypeScript, Web开发, 前端, 安全插件, 自动化攻击