Skip to content

fix: restore homepage/institutional copy from deploy before main merge - #121

Closed
marcelo-m7 wants to merge 111 commits into
hugo-templatefrom
dev
Closed

marcelo-m7 wants to merge 111 commits into
hugo-templatefrom
dev

Conversation

@marcelo-m7

@marcelo-m7 marcelo-m7 commented Jun 6, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • restored homepage and institutional copy in PT/EN using the deploy branch content as source
  • kept the current dev architecture and routing (no structural rewrites)
  • updated route and responsive navigation e2e assertions to match current copy and viewport behavior

Content restored and reviewed

  • Hero: badge, headline, lead and primary/secondary CTAs
  • Audience and values sections
  • Features and featured courses narratives
  • Learning journey, manifesto and final CTA copy
  • Institutional homepage section and legal disclaimer text
  • Removed duplicate i18n key home.journeyeyebrow (kept home.journeyEyebrow)

Navigation and footer

  • Verified global navigation and footer remain coherent with the updated homepage tone and existing videos route

Validation executed

  • pnpm install
  • pnpm build
  • pnpm exec playwright test tests/e2e/navigation-responsive.spec.ts tests/e2e/routes.spec.ts

Validation notes

  • pnpm run lint is not defined in package scripts
  • pnpm run typecheck is not defined in package scripts
  • pnpm run test is not defined in package scripts
  • Build still shows the known Vite chunk-size warning (>500 kB)

Known pending items

  • Full project typecheck currently includes pre-existing non-scope issues in other areas (Supabase Deno/functions and legacy e2e typing patterns)

marcelo-m7 and others added 30 commits February 7, 2026 23:53
…-template

Migrate legacy FACODI content into new template; add i18n, routing, dark mode and e2e scaffold
Add requirements.txt and update FACODI monorepo documentation
: implement FastAPI backend for Odoo integration with CRUD endpoints and configuration management
…s and add catalog service

- Updated Courses component to accept courses and units as props instead of using hardcoded data.
- Introduced catalogSource service to fetch courses and curricular units from Odoo or fallback to mock data.
- Added utility functions for data normalization and mapping.
- Updated package-lock.json to reflect dependency updates, including Rollup and Vite.
Refactor Odoo test scripts and implement FastAPI backend with Courses component
- Added logo image for FACODI in the frontend.
- Created institutional_dictionary.json with details about the company, project, partnership, license, language, source, editorial state, and curriculum version.
- Implemented apply_institutional_dictionary.py script to apply the institutional dictionary to Odoo, including field specifications for channels and slides, and functionality for creating fields and writing values.
…fication

- Implemented `setup_facodi_direct.py` for streamlined project setup.
- Created `setup_facodi_workspace.py` for comprehensive workspace initialization.
- Introduced `setup_minimal.py` for a minimalistic setup approach.
- Developed `setup_with_logging.py` for detailed logging during setup.
- Added `verify_setup.py` to check the status of the FACODI project and its components.
…e guide

- Introduced `facodi_setup_improved.py` script to create 61 detailed tasks with descriptions, success criteria, and dependencies.
- Consolidated duplicate tasks and renamed vague tasks for clarity.
- Created `TASK_IMPROVEMENTS_QUICK_REFERENCE.md` as a guide for using the new task structure, including a critical path timeline and deliverables template.
- Enhanced project management with balanced owner assignments and clear deliverables for each task.
- Deleted `setup_minimal.py` and `setup_with_logging.py` as they are no longer needed.
- Removed `verify_odoo_curriculum_sync.py` and `verify_setup.py` scripts to streamline the codebase.
- Eliminated connection testing scripts: `test_odoo_connection.py`, `test_odoo_model_access.py`, `test_odoo_safe_write_probe.py`.
- Cleaned up unused code and ensured that the repository is focused on current functionalities.
* feat: Update FACODI Monorepo Organizer agent with enhanced documentation and clarity

* feat: Added Codoo into the project

* feat: Enhance AGENTS.md with detailed project overview, directory map, commands, and environment variables

* Refactor Odoo e-learning integration: remove outdated instructions, update API call patterns, and enhance documentation for frontend connectivity. Add new guidelines for catalogSource.ts and environment setup. Introduce FACODI institutional proposal and strategic vision.


* feat: Update Odoo integration with JSON-RPC support, enhance Vite proxy configuration, and improve documentation for data loading


* chore: add uv.lock for Docker build; fix Playwright nav test strict-mode locator

* feat: enrich Odoo e-learning data mapping with real FACODI fields

- types.ts: add unitCode, sectionName, websiteUrl to CurricularUnit; add websiteUrl, curriculumVersion, contentLicense to Course
- catalogSource.ts: enrich channel/slide queries with x_facodi_* fields; parse year/semester from category_id section name; map real institution, curriculum version, workload hours; skip category slides (is_category=true)
- Home.tsx: replace hardcoded DEGREES/COURSE_UNITS with courses/units props
- App.tsx: pass courses/units props to Home component

* feat: centralize runtime study content in Odoo APIs

- remove remaining hardcoded runtime usage from App and AI navigator
- extend catalog source to return dynamic playlists extracted from Odoo slide content
- stop implicit mock fallback when VITE_DATA_SOURCE=odoo
- add explicit empty-state UI for unsynced course catalog
- update e2e assertion to support dynamic Odoo-backed datasets

* refactor: update AGENTS.md for clarity and structure; enhance frontend guidance and directory landmarks


* refactor: update CONTRIBUTING, FAQ, and SETUP documentation for clarity and consistency

- Simplified and clarified the CONTRIBUTING.md guide, focusing on principles, workflow, and commit conventions.
- Revised FAQ.md to streamline questions and answers, ensuring relevance to the FACODI project.
- Updated SETUP.md to reflect changes in setup instructions, including prerequisites and environment configuration.
- Enhanced task execution instructions and troubleshooting sections for better user guidance.

* feat: implement lesson detail page with routing

- add LessonDetail component with video player placeholder
- add lesson-detail route handling to App.tsx
- implement /lessons/{id} URL routing with browser history sync
- update repository view to navigate to lessons instead of courses
- add metadata sidebar with ECTS, duration, difficulty, prerequisites
- wire up lesson-to-lesson navigation from details page
- all e2e tests passing (5/5)
- TypeScript 0 errors

* refactor: update branding from Monynha Softwares to Open2 Technology across documentation and components

* test: stabilize lesson navigation e2e flow

- add unit-card test id to CourseCard for reliable UI navigation
- add lesson detail route test that opens first available unit
- assert lesson page renders one of video states (player/link/placeholder)
- keep behavior resilient for dynamic Odoo datasets

* refactor: update branding and remove roadmap references across components; add Odoo lesson video seeder script

* feat: add scripts to list and publish courses on Odoo with environment configuration

* test(e2e): add comprehensive lesson-detail and navigation test suites

- Create lesson-detail.spec.ts: 11 tests covering all three video rendering states (iframe embed, external link, placeholder)
- Create lesson-navigation.spec.ts: 11 tests covering lesson navigation flows, URL integrity, and cross-course navigation
- Add tests for responsive video rendering, layout accessibility, and error handling
- Document tests with Playwright strategy guide (docs/guides/PLAYWRIGHT-STRATEGY.md)
- Update Odoo authentication in catalogSource.ts to use credentials instead of guest session
- All existing tests (routes.spec.ts) continue to pass
- Tests gracefully handle both live Odoo data and mock data scenarios

Note: Odoo SaaS session issue with browser-side JSON-RPC through Vite proxy documented in PLAYWRIGHT-STRATEGY.md. Production deployment with backend API proxy will resolve this.

* Add end-to-end test results and last run status

- Created a new file `e2e-results.txt` to store the results of end-to-end tests, including details on passed and failed tests.
- Added a new JSON file `.last-run.json` to track the status of the last test run, indicating that all tests passed with no failures.


* feat: update documentation and implement video seeding for UC 19411008 with enhanced loading states and fallback mechanisms
… guide with recommended local modes and limitations
* Add best practices for optimizing React component rendering and server operations

- Introduced guidelines for memoization and avoiding unnecessary re-renders in React components.
- Added rules for handling side effects and event handlers to improve performance.
- Implemented strategies for parallel data fetching and minimizing serialization at RSC boundaries.
- Established practices for server actions, including authentication and non-blocking operations.
- Included caching techniques for cross-request data sharing and deduplication.
- Created documentation for avoiding shared module state and hoisting static I/O to module level.

* docs: Update AGENTS.md and README.md for improved clarity and development setup instructions

* feat: Enhance documentation and guidelines for Supabase integration, including E2E test setup and contract guardrails

* feat: integrate Supabase as a new data source for catalog

- Added Supabase client initialization and configuration.
- Extended CatalogSource type to include 'supabase'.
- Implemented loadSupabaseData function to fetch courses, units, and playlists from Supabase.
- Updated loadCatalogData function to handle data retrieval from Supabase, with fallback to mock data.
- Created supabase.types.ts to define types for Supabase database schema.

* feat: Add video management features including listing, detail view, and state handling

- Implemented VideoList component for displaying a list of videos with search and filter options.
- Created VideoDetail component to show detailed information about a selected video, including related videos and playlists.
- Added VideoCard component for individual video representation.
- Introduced VideoState component to handle loading, error, and empty states for video-related views.
- Integrated YouTubePlayer component for video playback.
- Developed videoSource service for fetching video data from Supabase, including public categories and playlists.
- Updated routing in App.tsx to accommodate new video views and navigation.
- Enhanced i18n translations for video-related terms in i18n.ts.
- Added tests for video navigation and rendering in routes.spec.ts.

* Phase 6: Embed playlist videos in unit detail pages

- Create hooks/usePlaylistVideos.ts custom hook for video state management
- Update Playlist type with courseCode and unitCode fields for matching
- Add findPlaylistForUnit helper to catalogSource.ts
- Integrate video section into CourseDetail component
  - Replace Recurso Externo card with video player + grid
  - Add loading, error, and empty state handling
  - Implement responsive design with stark-border styling
- Remove /videos and /video-detail routes from App.tsx
- Remove Videos navigation button from Layout.tsx
- Add i18n labels (Portuguese + English)
- Update E2E tests to remove video route tests
- All tests passing, build succeeds with no errors

* Fix: Use snake_case field names for Supabase playlist matching

- Change courseCode/unitCode to course_code/unit_code in Playlist type
- Update findPlaylistForUnit() to match Supabase schema
- Supabase playlists table uses snake_case columns, not camelCase
- Ensures playlist-to-unit matching works correctly with live data

* Fix: Map course_code and unit_code fields in Supabase playlist loading

- Include course_code and unit_code in Playlist objects loaded from Supabase
- These fields are required for findPlaylistForUnit() matching logic to work
- Without these fields, unit-to-playlist matching would fail in production

* Feature: Embed playlist videos in unit detail pages (LessonDetail)

- Updated LessonDetail component to support playlist video loading
- Added playlists prop to LessonDetail and passed from App.tsx
- Integrated usePlaylistVideos hook for video state management
- Rendered videos section with YouTube player and thumbnail grid
- Fixed: Use playlist id (UUID) instead of slug for database queries
- Videos now appear directly in unit pages instead of isolated /videos route
- Add ContentPage interface to types.ts
- Create services/contentSource.ts for Supabase content_pages queries
- Create components/InstitutionalPage.tsx for markdown rendering of institutional pages
- Add institutional page routing in App.tsx (manifesto, sobre, comunidade, roadmap, etc.)
- Add onNavigatePage prop to Layout.tsx footer with community links
- Wire 'Ler Manifesto' CTA in Home.tsx to navigate to /manifesto
- Restore all CurricularUnit fields in LessonDetail.tsx (category, sectionName, unitCode, websiteUrl, syllabusUrl, contentUrl fetch)
- Add lessonDetail.* and page.* i18n labels to data/i18n.ts (PT + EN)
- Create public.content_pages table in Supabase with RLS anon read policy
- Seed 9 institutional content pages (manifesto, sobre, sobre-marcelo, sobre-ualg, comunidade, roadmap, modelo-academico, infraestrutura, como-contribuir)
- Layout.tsx: mobile hamburger drawer with full navigation, project links,
  language switcher, theme toggle, body scroll lock; skip-to-content link;
  aria-current on nav items; header shrinks to h-16 on mobile (h-20 desktop)
- App.tsx: dynamic document.title per view (lesson, course, institutional page)
- index.html: full SEO — description, keywords, OG tags, Twitter card,
  theme-color, canonical link, favicon SVG link, manifest link,
  preconnect for Google Fonts, Organization JSON-LD structured data
- public/favicon.svg: branded FACODI favicon (black bg + yellow F)
- public/manifest.json: PWA web app manifest (standalone, theme #EFFF00)
- public/robots.txt: allow all, point to sitemap
- public/sitemap.xml: static sitemap for all main routes
…artifacts

- fix App title effect runtime crash (avoid selectedUnit/selectedLesson init order issue)
- improve Layout mobile navigation stability and accessibility
- add SEO meta, OG, Twitter, canonical, theme-color, JSON-LD in index.html
- add favicon.svg, manifest.json, robots.txt, sitemap.xml
- remove accidentally tracked Playwright test-results and ignore them via .gitignore
marcelo-m7 added 29 commits June 3, 2026 11:25
- Implemented v2_get_analysis_status function to retrieve the status of analysis jobs based on job_id, video_id, or youtube_video_id.
- Created v2_ingest_youtube_video function to ingest YouTube video details and create analysis jobs.
- Developed v2_match_video_candidates function to match video candidates based on embeddings and store results in the database.
- Added v2_review_classification function for editors to review and update classification statuses.
- Introduced v2_sync_course_catalog and v2_sync_course_from_odoo functions for syncing course data from external sources.
- Rebuilt the facodi schema with new tables and relationships to support the above functionalities.
- Implemented a local deterministic embedding function as a fallback when the OpenAI API key is missing or when the API request fails.
- Enhanced the `generateEmbedding` function to return local embeddings with appropriate usage metadata.
- Added a new function `getProfileEditorRole` to retrieve user roles from the profiles table for editor authentication.
- Updated the `requireEditorAuth` function to check both app metadata and profile roles for authorization.
- Modified the `facodi` function to allow dynamic schema selection based on environment variables.
- Introduced a user-agent header for YouTube API requests to improve scraping reliability.
- Added a new function `resolveChannelFromWeb` to fetch channel metadata directly from YouTube when the API is unavailable.
- Enhanced the `fetchChannelVideos` function to resolve channel IDs from web input and fetch video data accordingly.
- Updated Playwright tests to handle new functionalities and ensure robust testing of the curator channel pipeline.
- Added a utility function to dismiss the development modal in e2e tests.
- Updated home page test to check for new heading and text visibility.
- Modified course navigation test to include modal dismissal.
- Renamed dark mode toggle test to reflect current theme expectations.
- Added a new test for the videos page to ensure public video surface renders correctly.
- Updated student dashboard tests to check for authentication messages and dashboard content.
- Introduced a new service for handling video classification reviews, including listing and reviewing classifications.
- Created a new SQL migration to align the frontend with the facodi v2 schema, including new views and policies.
- Added a legacy cleanup test to ensure deprecated routes and flags are no longer referenced in the codebase.
- Remove legacy YouTube URL parsing helpers from youtube_url.py.
- Add VideoSubmitPage component for user video submissions with YouTube URL validation and preview.
- Create VideoSubmitStatusPage component to display submission status and allow retries.
- Document the new video pipeline in FACODI_V2_VIDEO_PIPELINE.md.
- Introduce videoSubmissionSource service for handling video submission and status retrieval.
- Implement new Supabase Edge Functions for video processing stages including fetching channel videos, submitting videos, and getting submission status.
- Ensure proper error handling and user authentication in new functions.
feat: enhance error handling in channel curation service

test: add tests for YouTube API functions and channel normalization

refactor: improve YouTube API interaction and channel fetching logic

feat: implement CategoryBadge component for category display

chore: add last run status for test results

feat: create utility for category metadata management
…ents

- Added loading state handling for catalog views in App component.
- Improved accessibility by adding aria-labels to buttons in CourseCard and CourseDetail components.
- Implemented CSV export functionality in Dashboard component for saved units.
- Updated navigation styles in Layout component for better focus visibility.
- Enhanced rejection process in AdminCuratorListPage with modal for inputting rejection reasons.
- Improved error handling and loading states in AdminDashboard.
- Updated BlogPostPage to include back navigation icon.
- Changed text colors for better readability in AdminReviewDashboard and CuratorApplicationPage.
- Added compact ID formatting in StudentDashboard, StudentMyCoursesPage, and StudentProgressPage for better display.
- Implemented debounced search functionality in VideoList component for improved search performance.
- Migrate video content extraction logic to `runExtractVideoContent` function.
- Migrate YouTube metadata fetching logic to `runFetchYoutubeMetadata` function.
- Migrate video candidate matching logic to `runMatchVideoCandidates` function.
- Introduce deterministic playlist assignment logic in `v2_playlist_assignment.ts`.
- Add tests for playlist assignment functionality.
- Improve error handling and response structures across video processing functions.
- Update video ingestion and submission functions to utilize new pipeline steps.
- Ensure consistent handling of YouTube video IDs and URLs across functions.
- Updated @types/node from ^22.19.19 to ^22.19.20
- Updated supabase from ^2.104.0 to ^2.105.0
- Removed test-results/.last-run.json file
- Introduced a new navigation.ts file to centralize navigation item definitions.
- Added new navigation items for "trails", "community", "about", and others in both English and Portuguese.
- Updated VideoList component to improve language option extraction.
- Added responsive navigation tests to ensure functionality across various viewports.
- Enhanced footer with additional links and descriptions for better user experience.
@marcelo-m7 marcelo-m7 closed this Jun 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant