|
1 | | -<!-- TFQ0 / Quality Control. Upload this README and the assets directory together. --> |
2 | | -<picture> |
3 | | - <source media="(max-width: 600px) and (prefers-reduced-motion: reduce) and (prefers-color-scheme: dark)" srcset="./assets/tfq-control-center-mobile-dark-static.svg"> |
4 | | - <source media="(max-width: 600px) and (prefers-reduced-motion: reduce) and (prefers-color-scheme: light)" srcset="./assets/tfq-control-center-mobile-light-static.svg"> |
5 | | - <source media="(prefers-reduced-motion: reduce) and (prefers-color-scheme: dark)" srcset="./assets/tfq-control-center-dark-static.svg"> |
6 | | - <source media="(prefers-reduced-motion: reduce) and (prefers-color-scheme: light)" srcset="./assets/tfq-control-center-light-static.svg"> |
7 | | - <source media="(max-width: 600px) and (prefers-color-scheme: dark)" srcset="./assets/tfq-control-center-mobile-dark.svg"> |
8 | | - <source media="(max-width: 600px) and (prefers-color-scheme: light)" srcset="./assets/tfq-control-center-mobile-light.svg"> |
9 | | - <source media="(prefers-color-scheme: dark)" srcset="./assets/tfq-control-center-dark.svg"> |
10 | | - <source media="(prefers-color-scheme: light)" srcset="./assets/tfq-control-center-light.svg"> |
11 | | - <img alt="Talal Alqahs — Software Test Engineer and Independent Developer. Build it. Break it. Make it better. Animated QA terminal demonstration; not live test results." src="./assets/tfq-control-center-dark.svg" width="100%"> |
12 | | -</picture> |
13 | | - |
14 | | -<p align="center"> |
15 | | - <a href="#selected-work">Selected work</a> / |
16 | | - <a href="#toolbox">Toolbox</a> / |
17 | | - <a href="#open-source">Open source</a> |
18 | | -</p> |
19 | | - |
20 | | -## Beyond the green checkmark. |
21 | | - |
22 | | -I'm **Talal**, a Software Test Engineer and independent developer. I work across UI automation, API testing, and backend development—connecting how software is built with how it behaves in the real world. |
23 | | - |
24 | | -I like reproducible bugs, useful automation, readable code, and tools that stay open. |
| 1 | +# Animated GitHub Profile Studio |
25 | 2 |
|
26 | | -```text |
27 | | -inspect → reproduce → automate → improve |
| 3 | +A browser-based editor for creating a personal GitHub profile README from one reusable configuration. Customize the text, animated terminal, featured repositories, skills, links, section order, colors, and motion settings, then export a ready-to-upload ZIP. |
| 4 | + |
| 5 | +The built-in TFQ0 design remains the canonical example, but users no longer need to edit eight SVG files by hand. |
| 6 | + |
| 7 | +## What it includes |
| 8 | + |
| 9 | +- Live desktop and mobile preview in dark and light themes. |
| 10 | +- Animated and reduced-motion/static SVG variants. |
| 11 | +- Profile, hero, project, skill, link, palette, section, Markdown, and footer editing. |
| 12 | +- Optional public GitHub repository import with no login or token. |
| 13 | +- Local autosave of the last valid configuration. |
| 14 | +- Versioned `profile.config.json` import/export. |
| 15 | +- Deterministic ZIP generation containing `README.md`, setup guidance, the saved config, and all eight SVG assets. |
| 16 | +- Strict runtime validation, HTTPS-only generated links, contextual XML/Markdown escaping, and self-contained SVG output. |
| 17 | +- WebMCP tools for agents to read or stage the same configuration used by the visible editor. |
| 18 | + |
| 19 | +## Use the studio |
| 20 | + |
| 21 | +1. Open the app and choose **Start blank** or customize the TFQ0 example. |
| 22 | +2. Work through Profile, Hero, Projects, Skills, Links, Style, and Sections. |
| 23 | +3. Check the desktop/mobile, dark/light, and animated/static previews. |
| 24 | +4. Resolve validation errors and review any design warnings in Export. |
| 25 | +5. Download the complete ZIP. |
| 26 | +6. Upload its `README.md` and `assets/` directory to the public GitHub repository whose name exactly matches your username. |
| 27 | + |
| 28 | +Keep the exported `profile.config.json`; importing it later restores an editable profile instead of requiring manual SVG changes. |
| 29 | + |
| 30 | +## Local development |
| 31 | + |
| 32 | +Requirements: Node.js `^22.13.0` or `>=24.0.0` and npm. |
| 33 | + |
| 34 | +```bash |
| 35 | +npm ci |
| 36 | +npm run dev |
28 | 37 | ``` |
29 | 38 |
|
30 | | -## Selected work |
| 39 | +The local app is served at `http://localhost:4173/`. |
31 | 40 |
|
32 | | -| Project | What it does | Focus | |
33 | | -| :--- | :--- | :--- | |
34 | | -| **[tfq0seo](https://github.com/TFQ0/tfq0seo)** | A command-line SEO analyzer with site crawling and report generation. | Python · CLI tooling | |
35 | | -| **[tfq0tool](https://github.com/TFQ0/tfq0tool)** | Extracts text from documents, data files, and source code. | Python · Automation | |
36 | | -| **[ksaa-api-tool](https://github.com/TFQ0/ksaa-api-tool)** | A browser-based interface for exploring Falak API endpoints. | API testing · Developer tooling | |
| 41 | +```bash |
| 42 | +npm run typecheck |
| 43 | +npm test |
| 44 | +npm run build |
| 45 | +``` |
37 | 46 |
|
38 | | -<!-- Add other projects when their public repositories are ready to share. --> |
| 47 | +The production site is written to `dist/`. Vite uses relative asset URLs, so the build works at a root domain or a GitHub Pages project subpath. |
39 | 48 |
|
40 | | -## Toolbox |
| 49 | +## Architecture |
41 | 50 |
|
42 | | -**Testing** |
43 | | -`Playwright` `Cypress` `Bruno` `Postman` `JMeter` |
| 51 | +```text |
| 52 | +src/ |
| 53 | +├── domain/profile.ts # strict v1 config, template metadata, presets |
| 54 | +├── generator/ |
| 55 | +│ ├── svg.ts # pure eight-variant SVG renderer |
| 56 | +│ ├── readme.ts # GitHub README renderer |
| 57 | +│ ├── escape.ts # XML/Markdown/URL safety boundaries |
| 58 | +│ └── artifacts.ts # deterministic file and ZIP assembly |
| 59 | +├── services/github.ts # optional public repository import |
| 60 | +├── components/ # editor fields and GitHub-like preview |
| 61 | +├── webmcp.ts # agent-facing read/stage actions |
| 62 | +└── App.tsx # editor state and workflows |
| 63 | +``` |
44 | 64 |
|
45 | | -**Development** |
46 | | -`Python` `TypeScript` `JavaScript` `FastAPI` `PostgreSQL` |
| 65 | +`ProfileConfig` is the single source of truth. The visible preview, README source, SVG files, saved config, and ZIP are all produced from the same validated object. Imported GitHub data becomes an editable snapshot; it is never a hidden dependency of later exports. |
47 | 66 |
|
48 | | -**Environment & delivery** |
49 | | -`Git` `GitHub Actions` `Docker` `Linux` |
| 67 | +## Privacy and output safety |
50 | 68 |
|
51 | | -## Open source |
| 69 | +- The editor has no backend and requests no GitHub token. |
| 70 | +- Drafts and the short-lived public repository cache stay in browser storage. |
| 71 | +- Only public repository metadata is fetched directly from GitHub's public API. |
| 72 | +- Generated SVGs contain no scripts, event handlers, remote fonts, external images, tracking, or live CI claims. |
| 73 | +- Static fallbacks are generated for visitors who prefer reduced motion. |
| 74 | +- Custom Markdown blocks raw HTML and neutralizes non-HTTPS link destinations in generated output. |
52 | 75 |
|
53 | | -I enjoy understanding a project before changing it: reproduce the problem, trace the cause, make a focused change, and verify the result. |
| 76 | +## Legacy reference |
54 | 77 |
|
55 | | -[Pull requests](https://github.com/pulls?q=is%3Apr+author%3ATFQ0) / [Issues](https://github.com/issues?q=is%3Aissue+author%3ATFQ0) / [Repositories](https://github.com/TFQ0?tab=repositories) |
| 78 | +The original hand-authored TFQ0 SVGs, screenshots, GIF, and `preview.html` remain in `assets/` and `preview/` as visual references. They are not used by the Studio build. New custom profiles should be generated through the editor so all responsive, theme, and reduced-motion variants stay synchronized. |
56 | 79 |
|
57 | | ---- |
| 80 | +## License |
58 | 81 |
|
59 | | -<p align="center"> |
60 | | - <sub><b>No monopoly. Yes to open source.</b><br>Build it. Break it. Test it. Improve it.</sub> |
61 | | -</p> |
| 82 | +No license has been selected yet. Choose and add an appropriate license before inviting third parties to copy, modify, or redistribute the source. |
0 commit comments