-
-
Notifications
You must be signed in to change notification settings - Fork 1
Claude/main portfolio footer g1 gdx #65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
- Add 6 Mac/Apple RSS sources (MacRumors, 9to5Mac, AppleInsider, Cult of Mac, MacWorld, Mac4Ever) - Add anchor links for each category (#mac, #ai, #cybersecurity, #iot) - Add visual separators between categories - Move Portfolio link from header nav to footer on all pages https://claude.ai/code/session_0138bAjho1fWwiRZju3nJFJ3
… doc to docs/, add Documentation badge - TECHNIQUE.md: bilingual documentation (English first, French second) with flag anchors - Moved SUPABASE_MIGRATION.md from database/ to docs/ - Documentation badge now points to docs/TECHNIQUE.md - Updated for Mac sources and anchor navigation https://claude.ai/code/session_0138bAjho1fWwiRZju3nJFJ3
Clarify that statistics are personal, stored locally in localStorage, and no data is sent to any server. https://claude.ai/code/session_0138bAjho1fWwiRZju3nJFJ3
- Sidebar menu with navigation (Dashboard, Home, Reader, Docs) - Pages load in iframe while keeping menu visible - Login overlay for Supabase authentication - Stats dashboard placeholder for global analytics - noindex/nofollow for search engine exclusion https://claude.ai/code/session_0138bAjho1fWwiRZju3nJFJ3
- Use cyberpunk dark theme matching site design - Remove external iframe embedding - Change links from EthanThePhoenix38 to ThePhoenixAgency - Fix XSS vulnerability in dynamic project loading - Make projects section configurable (not auto-fetched) https://claude.ai/code/session_0138bAjho1fWwiRZju3nJFJ3
- PORTFOLIO_CONFIG for customization - hideForks: true by default - featuredProjects: prioritize specific repos - excludeProjects: hide unwanted repos - Safe DOM manipulation (no innerHTML XSS) - Sort by stars/updated/name https://claude.ai/code/session_0138bAjho1fWwiRZju3nJFJ3
| // Login handler | ||
| loginForm.addEventListener('submit', async (e) => { | ||
| e.preventDefault(); | ||
| const email = document.getElementById('email').value; |
| loginForm.addEventListener('submit', async (e) => { | ||
| e.preventDefault(); | ||
| const email = document.getElementById('email').value; | ||
| const password = document.getElementById('password').value; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3ab6a75f18
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| loadingElement.remove(); | ||
| try { | ||
| // Fetch org stats | ||
| const orgResponse = await fetch(`https://api.github.com/orgs/${PORTFOLIO_CONFIG.githubOrg}`); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Handle user accounts when fetching GitHub data
The config comment above says githubOrg can be an organization or username, but the fetches here hard‑code the /orgs/ API. That endpoint 404s for user accounts, so if someone sets githubOrg to a personal username (which the UI suggests is supported), both the stats and repo list will fail to load. Consider detecting account type or falling back to /users/ to preserve the prior behavior.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This pull request reorganizes the site navigation by moving the Portfolio link from the header navigation to the footer across all pages, refactors the portfolio page to display GitHub organization projects dynamically, adds Mac/Apple news sources to the RSS aggregator, and significantly expands the technical documentation with bilingual content.
Changes:
- Portfolio link relocated from header to footer navigation on all HTML pages for cleaner navigation
- Portfolio page completely redesigned with dynamic GitHub API integration, improved security (XSS prevention via textContent), and configurable project display
- New Mac/Apple news category added to RSS aggregator with 6 sources (MacRumors, 9to5Mac, AppleInsider, Cult of Mac, MacWorld, Mac4Ever)
- Technical documentation (TECHNIQUE.md) expanded to be fully bilingual (English/French) with comprehensive architecture and deployment information
- New Supabase migration guide (SUPABASE_MIGRATION.md) added in French with detailed setup instructions
- New backend.html admin interface added (login placeholder, Supabase integration ready)
- Documentation reference updated from database/SUPABASE_MIGRATION.md to docs/TECHNIQUE.md in README generation
- Category anchor links added to README generation for better navigation
- Statistics page updated with improved bilingual privacy notice
Reviewed changes
Copilot reviewed 9 out of 10 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| stats.html | Portfolio link moved to footer; enhanced bilingual privacy notice for localStorage statistics |
| privacy.html | Portfolio link moved to footer |
| index.html | Portfolio link moved to footer |
| app.html | Portfolio link moved to footer |
| about.html | Portfolio link moved to footer |
| portfolio.html | Complete redesign with GitHub API integration, XSS-safe rendering, configurable project filtering, and organization switch from user to org |
| src/aggregator.js | Added Mac category with 6 RSS sources; updated documentation links to docs/TECHNIQUE.md; added category anchors to README generation |
| docs/TECHNIQUE.md | Expanded to comprehensive bilingual documentation with architecture details, deployment instructions, and technology stack |
| docs/SUPABASE_MIGRATION.md | New French-language migration guide for Supabase analytics integration with step-by-step instructions |
| backend.html | New admin dashboard interface with Supabase authentication placeholder and sidebar navigation |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| let readme = README_HEADER; | ||
|
|
||
| // Generate sections for each category | ||
| // Category titles mapping |
Copilot
AI
Feb 6, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The category title mapping is missing an entry for potential future categories. Consider adding a fallback or handling unknown categories more explicitly. Currently, unknown categories will use 'General News' as a fallback (line 281), which is good, but documenting this behavior in a comment would improve maintainability.
| // Category titles mapping | |
| // Category titles mapping. | |
| // Note: This mapping is intentionally not exhaustive. Any category key | |
| // not listed here will fall back to the generic 'General News' title | |
| // when rendering below (see the `categoryTitles[category] || 'General News'` | |
| // usage). Add new entries here only when a custom section title is needed. |
| // Login handler | ||
| loginForm.addEventListener('submit', async (e) => { | ||
| e.preventDefault(); | ||
| const email = document.getElementById('email').value; |
Copilot
AI
Feb 6, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unused variable email.
| loginForm.addEventListener('submit', async (e) => { | ||
| e.preventDefault(); | ||
| const email = document.getElementById('email').value; | ||
| const password = document.getElementById('password').value; |
Copilot
AI
Feb 6, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unused variable password.
| const password = document.getElementById('password').value; |
No description provided.