TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證在地圖上規劃任意運動的路線,並匯出 GPX 或 FIT 課程供手錶、GPS 或自行車電腦使用。
AI 翻譯
A resume webpage that you can share with link instead of document.
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Your AI-Powered Professional Presence — Build stunning, shareable resumes in minutes.
PresenceCV is a modern, AI-powered online resume builder built with React, TypeScript, and Firebase. It features a rich editing experience with drag-and-drop sections, real-time sharing, PDF export, multi-language (i18n) support, and Gemini AI–powered resume importing.
• Node.js 18+
• A Firebase project with Authentication (Google provider) and Firestore Database enabled
• (Optional) A Gemini API key for AI resume import檢視完整 README ↗Your AI-Powered Professional Presence — Build stunning, shareable resumes in minutes.
PresenceCV is a modern, AI-powered online resume builder built with React, TypeScript, and Firebase. It features a rich editing experience with drag-and-drop sections, real-time sharing, PDF export, multi-language (i18n) support, and Gemini AI–powered resume importing.
| Feature | Description |
|---|---|
| AI Resume Import | Upload a PDF, JPG, or PNG and Gemini AI extracts structured data automatically |
| Live Share Links | Generate a URL that updates in real-time as you edit |
| Snapshot Links | Capture a point-in-time version of your resume to share |
| PDF Export | Clean, A4-optimized print layout with auto-scaling |
| Multi-Profile | Create and manage multiple resume versions for different opportunities |
| Multi-Language (i18n) | Seamless internationalization with English and Traditional Chinese UI switching |
| XSS & URL Sanitization | DOMPurify-powered sanitization preventing javascript: XSS script execution |
| Rate Limiting & Security | Upstash Redis API rate limiter and Firebase App Check bot protection |
| Theme Accent Colors | 6 preset accent colors + custom hex color picker |
| Photo Upload | Upload and crop a profile photo with an in-browser cropper |
| Drag & Drop | Reorder sections and items with smooth drag-and-drop |
| Warm Glassmorphic UI | Premium warm cream-tone aesthetic with glassmorphic cards and animated smoke background |
git clone <your-repo-url>
cd PresenceCV
npm install
cp .env.example .env
Edit .env and fill in your values:
# ------------------------------------------------------------------------------
# 1. Firebase Client Configuration (Required for Frontend)
# ------------------------------------------------------------------------------
VITE_FIREBASE_API_KEY=your_api_key
VITE_FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_project_id.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
VITE_FIREBASE_APP_ID=your_app_id
VITE_FIREBASE_DATABASE_ID= # Optional: Non-default Firestore DB ID
# ------------------------------------------------------------------------------
# 2. AI Features Configuration (Required for AI Resume Import)
# ------------------------------------------------------------------------------
GEMINI_API_KEY=your_gemini_api_key
# ------------------------------------------------------------------------------
# 3. Security & Admin Configuration (Required for Serverless Admin SDK)
# ------------------------------------------------------------------------------
FIREBASE_SERVICE_ACCOUNT_KEY= # Stringified JSON of your Firebase Admin Service Account Key
# ------------------------------------------------------------------------------
# 4. Serverless API Rate Limiting (Optional but Recommended)
# ------------------------------------------------------------------------------
UPSTASH_REDIS_REST_URL=your_upstash_redis_url
UPSTASH_REDIS_REST_TOKEN=your_upstash_redis_token
# ------------------------------------------------------------------------------
# 5. Firebase App Check & Security (Optional)
# ------------------------------------------------------------------------------
# Optional: Google reCAPTCHA v3 Site Key for App Check. Safely bypassed if omitted.
VITE_RECAPTCHA_SITE_KEY=your_recaptcha_site_key
Note: Frontend-accessible variables must be prefixed with
VITE_(Vite requirement). Server-side credentials (GEMINI_API_KEY,FIREBASE_SERVICE_ACCOUNT_KEY,UPSTASH_*) do NOT need the prefix and remain hidden from client bundles.
npm run dev
Open http://localhost:3000 — this starts an Express server with Vite middleware for hot module replacement.
npm run build
npm start
To run unit, integration, and security rules tests:
# Run tests once (Vitest)
npm run test
# Run tests in watch mode
npm run test:watch
# Run Firestore security rules tests (requires a Java JRE for the emulator)
npm run test:rules
| Layer | Technology |
|---|---|
| Frontend | React 19, TypeScript 5.8, TailwindCSS 4 |
| UI & i18n Libraries | lucide-react, Motion (Framer Motion), @hello-pangea/dnd, react-easy-crop, i18next, i18next-browser-languagedetector, DOMPurify |
| Routing | react-router-dom v7 |
| Build | Vite 6 |
| Dev Server | Express 4 + Vite middleware |
| AI | Google Gemini (@google/genai) |
| Backend & Security | Firebase Authentication (Google OAuth), Firestore, Firebase App Check (reCAPTCHA v3), Upstash Redis Rate Limiter |
| Testing | Vitest, React Testing Library, jsdom, @firebase/rules-unit-testing |
| Deployment | Vercel (SPA + Serverless Functions) |
PresenceCV/
├── index.html # SPA entry point
├── server.ts # Express dev server + API proxy
├── vite.config.ts # Vite configuration
├── vitest.config.ts # Vitest configuration
├── tsconfig.json # TypeScript configuration
├── firebase.json # Firebase config
├── firestore.rules # Firestore security rules
├── vercel.json # Vercel deployment config
├── .env.example # Environment variables template
├── package.json # Dependencies and scripts
│
├── api/
│ └── parse-resume.ts # Vercel serverless functions (AI parser)
│
├── public/
│ └── favicon.png # Monogram CV logo & favicon
│
├── tests/ # Vitest unit & security rules tests
│ ├── EditorPage.test.tsx
│ ├── ImportResumeModal.test.tsx
│ ├── LanguageSwitcher.test.tsx
│ ├── ViewerPage.test.tsx
│ ├── api.parse-resume.test.ts
│ ├── firestore.rules.test.ts
│ ├── htmlSanitizer.test.ts
│ ├── performance.test.tsx
│ ├── rateLimiter.test.ts
│ ├── useResume.test.ts
│ └── utils.test.ts
│
└── src/
├── main.tsx # React DOM entry
├── App.tsx # Root component (routing + auth)
├── setupTests.ts # Vitest setup (jest-dom, whatwg-fetch)
├── types.ts # Shared TypeScript interfaces
├── constants.ts # Application constants
├── index.css # Global styles + print layout
│
├── components/ # Reusable UI components (Editor, Viewer, Modal, i18n)
├── contexts/ # React context providers (AuthContext)
├── data/ # Static resume templates
├── hooks/ # Custom hooks (useResume — core state mgmt)
├── i18n/ # Internationalization config and translations
├── lib/ # Firebase init, error handling, App Check
├── pages/ # Route-level page components (Editor, Viewer, Share)
└── utils/ # Sanitization (DOMPurify), RateLimiter, Exporters
/api/parse-resume abusejavascript: schemes in URLsownerUid verificationadmins Firestore collection where the Document ID is exactly the user's Firebase UID.VITE_FIREBASE_* variablesGEMINI_API_KEY (for server-side AI parsing)FIREBASE_SERVICE_ACCOUNT_KEY (for server-side token verification)UPSTASH_REDIS_REST_URL & UPSTASH_REDIS_REST_TOKEN (optional rate limiter)VITE_RECAPTCHA_SITE_KEY (optional App Check)api/ for serverless functionsvercel.json SPA rewrite handles client-side routingcontentEditable fields may behave differently across browsersApache-2.0 — see the license header in source files.