Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/docker-build-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ jobs:
tags: |
type=raw,value=development
labels: |
org.opencontainers.image.title=LFX PCC UI
org.opencontainers.image.description=Linux Foundation LFX Project Control Center UI application
org.opencontainers.image.title=LFX One UI
org.opencontainers.image.description=Linux Foundation LFX One UI application
org.opencontainers.image.vendor=The Linux Foundation
org.opencontainers.image.licenses=MIT
org.opencontainers.image.documentation=https://github.com/${{ github.repository }}/blob/main/README.md
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/docker-build-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ jobs:
tags: |
type=ref,event=pr,prefix=ui-pr-
labels: |
org.opencontainers.image.title=LFX PCC UI
org.opencontainers.image.description=Linux Foundation LFX Project Control Center UI application
org.opencontainers.image.title=LFX One UI
org.opencontainers.image.description=Linux Foundation LFX One UI application
org.opencontainers.image.vendor=The Linux Foundation
org.opencontainers.image.licenses=MIT
org.opencontainers.image.documentation=https://github.com/${{ github.repository }}/blob/main/README.md
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/docker-build-tag.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@ jobs:
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
labels: |
org.opencontainers.image.title=LFX PCC UI
org.opencontainers.image.description=Linux Foundation LFX Project Control Center UI application
org.opencontainers.image.title=LFX One UI
org.opencontainers.image.description=Linux Foundation LFX One UI application
org.opencontainers.image.vendor=The Linux Foundation
org.opencontainers.image.licenses=MIT
org.opencontainers.image.documentation=https://github.com/${{ github.repository }}/blob/main/README.md
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ jobs:

- name: Create Playwright auth directory
if: steps.validate-secrets.outputs.can_run_tests == 'true'
working-directory: apps/lfx-pcc
working-directory: apps/lfx-one
run: mkdir -p playwright/.auth

- name: Build the application
Expand All @@ -247,7 +247,7 @@ jobs:
- name: Run E2E tests (All browsers)
id: run-tests-all
if: ${{ inputs.browser == 'all' && steps.validate-secrets.outputs.can_run_tests == 'true' }}
working-directory: apps/lfx-pcc
working-directory: apps/lfx-one
continue-on-error: true
run: |
if [ -n "$TEST_USERNAME" ] && [ -n "$TEST_PASSWORD" ]; then
Expand All @@ -265,7 +265,7 @@ jobs:

- name: Run E2E tests (Specific browser)
if: ${{ inputs.browser != 'all' && steps.validate-secrets.outputs.can_run_tests == 'true' }}
working-directory: apps/lfx-pcc
working-directory: apps/lfx-one
run: |
if [ -n "$TEST_USERNAME" ] && [ -n "$TEST_PASSWORD" ]; then
echo "πŸ” Running authenticated E2E tests on ${{ inputs.browser }}"
Expand Down Expand Up @@ -296,7 +296,7 @@ jobs:
- name: Generate test results summary
id: test-results
if: always()
working-directory: apps/lfx-pcc
working-directory: apps/lfx-one
run: |
if [ "${{ steps.validate-secrets.outputs.can_run_tests }}" == "false" ]; then
echo "⏭️ E2E tests skipped (missing required secrets)"
Expand Down
8 changes: 4 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

- [Angular 19 Development Patterns](#angular-19-development-patterns) - Zoneless change detection, signals, components
- [Component Organization Pattern](#component-organization-pattern) - Standardized component structure
- [Shared Package (@lfx-pcc/shared)](#shared-package-lfx-pccshared) - Types, interfaces, constants
- [Shared Package (@lfx-one/shared)](#shared-package-lfx-oneshared) - Types, interfaces, constants
- [PrimeNG Component Wrappers](#primeng-component-wrappers) - UI library abstraction
- [Path Mappings](#path-mappings) - Import aliases and conventions

Expand Down Expand Up @@ -58,14 +58,14 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

## Project Overview

LFX PCC is a Turborepo monorepo containing an Angular 19 SSR application with experimental zoneless change detection and Express.js server.
LFX One is a Turborepo monorepo containing an Angular 19 SSR application with experimental zoneless change detection and Express.js server.

## Monorepo Structure

```text
lfx-v2-ui/
β”œβ”€β”€ apps/
β”‚ └── lfx-pcc/ # Angular 19 SSR application with zoneless change detection
β”‚ └── lfx-one/ # Angular 19 SSR application with zoneless change detection
β”‚ β”œβ”€β”€ eslint.config.mjs # Angular-specific ESLint rules
β”‚ β”œβ”€β”€ .prettierrc # Prettier configuration with Tailwind integration
β”‚ └── tailwind.config.js # Tailwind with PrimeUI plugin and LFX colors
Expand Down Expand Up @@ -100,7 +100,7 @@ lfx-v2-ui/
- Authentication is handled by Auth0/Authelia with express-openid-connect middleware
- Logging uses Pino for structured JSON logs with sensitive data redaction
- Health checks are available at /health and are not logged or authenticated
- All shared types, interfaces, and constants are centralized in @lfx-pcc/shared package
- All shared types, interfaces, and constants are centralized in @lfx-one/shared package
- **AI Service Integration**: Claude Sonnet 4 model via LiteLLM proxy for meeting agenda generation
- **AI Environment Variables**: AI_PROXY_URL and AI_API_KEY required for AI functionality
- **M2M Environment Variables**: M2M_AUTH_CLIENT_ID, M2M_AUTH_CLIENT_SECRET for machine-to-machine auth
Expand Down
6 changes: 3 additions & 3 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Contributing to LFX Projects Self-Service
# Contributing to LFX One

Contributions are what make the open-source community such an amazing place to learn, inspire, and create.

Thank you for your interest in contributing to LFX PCC! This document provides guidelines and instructions for contributing to the project.
Thank you for your interest in contributing to LFX One! This document provides guidelines and instructions for contributing to the project.

## Table of Contents

Expand Down Expand Up @@ -230,4 +230,4 @@ If you have questions about contributing, please:
2. Open a new issue for clarification
3. Join our community channels

Thank you for contributing to LFX PCC!
Thank you for contributing to LFX One!
4 changes: 2 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ WORKDIR /app
# Copy package files ONLY for dependency installation (for better layer caching)
COPY package.json yarn.lock turbo.json .yarnrc.yml ./
COPY .yarn .yarn
COPY apps/lfx-pcc/package.json ./apps/lfx-pcc/
COPY apps/lfx-one/package.json ./apps/lfx-one/
COPY packages/shared/package.json ./packages/shared/

# Install dependencies (this layer is cached when deps don't change)
Expand All @@ -31,4 +31,4 @@ RUN yarn build:${BUILD_ENV}
EXPOSE 4000

# Start the SSR server directly from built artifacts
CMD ["yarn", "workspace", "lfx-pcc", "start:server"]
CMD ["yarn", "workspace", "lfx-one-ui", "start:server"]
20 changes: 10 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# LFX PCC
# LFX One

This is a monorepo for the LFX PCC (Projects Self-Service) application, built
This is a monorepo for the LFX One application, built
with Angular 19 and experimental zoneless change detection.

## What's inside?

### Apps and Packages

- `apps/lfx-pcc`: Angular 19 SSR application with zoneless change detection and
- `apps/lfx-one`: Angular 19 SSR application with zoneless change detection and
direct PrimeNG UI components

The app is 100% [TypeScript](https://www.typescriptlang.org/).
Expand Down Expand Up @@ -54,7 +54,7 @@ of conduct, development process, and how to submit pull requests.
1. **Copy the environment template:**

```bash
cp apps/lfx-pcc/.env.example apps/lfx-pcc/.env
cp apps/lfx-one/.env.example apps/lfx-one/.env
```

2. **Configure required environment variables:**
Expand Down Expand Up @@ -151,24 +151,24 @@ You can run commands for the application using Turborepo filters:

```bash
# Start the Angular app
yarn start --filter=lfx-pcc
yarn start --filter=lfx-one

# Build the Angular app
yarn build --filter=lfx-pcc
yarn build --filter=lfx-one

# Run tests for the app
yarn test --filter=lfx-pcc
yarn test --filter=lfx-one

# Lint the app
yarn lint --filter=lfx-pcc
yarn lint --filter=lfx-one
```

## Project Structure

```text
lfx-pcc-v3/
lfx-one/
β”œβ”€β”€ apps/
β”‚ └── lfx-pcc/ # Angular 19 SSR application
β”‚ └── lfx-one/ # Angular 19 SSR application
β”‚ β”œβ”€β”€ src/app/config/ # Tailwind custom configurations
β”‚ β”‚ └── styles/ # Colors and font-size configurations
β”‚ β”œβ”€β”€ eslint.config.mjs # Angular-specific ESLint rules
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
4 changes: 2 additions & 2 deletions apps/lfx-pcc/README.md β†’ apps/lfx-one/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# LFX PCC Application
# LFX One Application

This is the main Angular 19 application for the LFX PCC (Linux Foundation Experience Platform Community Contribution) project, built with experimental zoneless change detection and direct PrimeNG integration.
This is the main Angular 19 application for the LFX One project, built with experimental zoneless change detection and direct PrimeNG integration.

## Key Features

Expand Down
10 changes: 5 additions & 5 deletions apps/lfx-pcc/angular.json β†’ apps/lfx-one/angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"version": 1,
"newProjectRoot": "projects",
"projects": {
"lfx-pcc": {
"lfx-one": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
Expand Down Expand Up @@ -33,7 +33,7 @@
"build": {
"builder": "@angular-devkit/build-angular:application",
"options": {
"outputPath": "dist/lfx-pcc",
"outputPath": "dist/lfx-one",
"index": "src/index.html",
"browser": "src/main.ts",
"polyfills": [],
Expand Down Expand Up @@ -123,13 +123,13 @@
},
"configurations": {
"production": {
"buildTarget": "lfx-pcc:build:production"
"buildTarget": "lfx-one:build:production"
},
"development": {
"buildTarget": "lfx-pcc:build:development"
"buildTarget": "lfx-one:build:development"
},
"local": {
"buildTarget": "lfx-pcc:build:local"
"buildTarget": "lfx-one:build:local"
}
},
"defaultConfiguration": "local"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// Copyright The Linux Foundation and each contributor to LFX.
// SPDX-License-Identifier: MIT

import { Project } from '@lfx-pcc/shared/interfaces';
import { Project } from '@lfx-one/shared/interfaces';

/**
* Mock project data for Playwright tests
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ test.describe('Homepage - Robust Tests', () => {

test.describe('Page Structure and Components', () => {
test('should have correct page structure with main sections', async ({ page }) => {
await expect(page).toHaveTitle('LFX Projects');
await expect(page).toHaveTitle('LFX One');
await expect(page).toHaveURL('/');

// Check main homepage component is present
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ test.describe('Project Dashboard - Robust Tests', () => {

test.describe('Page Structure and Components', () => {
test('should have correct page structure with main content', async ({ page }) => {
await expect(page).toHaveTitle('LFX Projects');
await expect(page).toHaveTitle('LFX One');
await expect(page).toHaveURL(/\/project\/[\w-]+$/);

// Check main project component is present
Expand Down Expand Up @@ -264,8 +264,8 @@ test.describe('Project Dashboard - Robust Tests', () => {
// Search bar should be hidden on mobile (responsive design)
await expect(page.locator('[data-testid="header-search-autocomplete"]')).toBeHidden();

// On mobile: "Projects" text is completely hidden from header button
// We need to target the specific span that contains "Projects" text
// On mobile: "One" text is completely hidden from header button
// We need to target the specific span that contains "One" text
await expect(page.getByTestId('header-projects-text')).toBeHidden();

// Search bar should be hidden on mobile (responsive design)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ test.describe('Project Dashboard', () => {

test.describe('Navigation and Layout', () => {
test('should display correct page title and URL', async ({ page }) => {
await expect(page).toHaveTitle('LFX Projects');
await expect(page).toHaveTitle('LFX One');
await expect(page).toHaveURL(/\/project\/[\w-]+$/);
});

Expand Down Expand Up @@ -322,8 +322,8 @@ test.describe('Project Dashboard', () => {
await expect(page.getByRole('link', { name: 'Dashboard' })).toBeVisible();
await page.getByRole('link', { name: 'Dashboard' }).click();

// All dashboard elements should be visible on tablet (768px = desktop, "Projects" text visible)
await expect(page.getByRole('button', { name: 'Go to home page' }).getByText('Projects', { exact: true })).toBeVisible();
// All dashboard elements should be visible on tablet (768px = desktop, "One" text visible)
await expect(page.getByRole('button', { name: 'Go to home page' }).getByText('One', { exact: true })).toBeVisible();
await expect(page.getByRole('heading', { name: 'Academy Software Foundation (ASWF)' })).toBeVisible();
await expect(page.getByText('Total Members')).toBeVisible();
await expect(page.getByText('Project Health')).toBeVisible();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
module.exports = {
apps: [
{
name: 'lfx-pcc',
script: 'dist/lfx-pcc/server/server.mjs',
name: 'lfx-one',
script: 'dist/lfx-one/server/server.mjs',
env: {
PM2: 'true',
NODE_ENV: 'production',
Expand Down
File renamed without changes.
4 changes: 2 additions & 2 deletions apps/lfx-pcc/package.json β†’ apps/lfx-one/package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "lfx-pcc",
"name": "lfx-one-ui",
"version": "0.0.0",
"scripts": {
"ng": "ng",
Expand Down Expand Up @@ -38,7 +38,7 @@
"@fullcalendar/core": "^6.1.19",
"@fullcalendar/daygrid": "^6.1.19",
"@fullcalendar/timegrid": "^6.1.19",
"@lfx-pcc/shared": "workspace:*",
"@lfx-one/shared": "workspace:*",
"@linuxfoundation/lfx-ui-core": "^0.0.20",
"@primeng/themes": "^19.1.4",
"compression": "^1.8.1",
Expand Down
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
// SPDX-License-Identifier: MIT

import { CommonModule } from '@angular/common';
import { CUSTOM_ELEMENTS_SCHEMA, Component, inject, makeStateKey, REQUEST_CONTEXT, TransferState } from '@angular/core';
import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, makeStateKey, REQUEST_CONTEXT, TransferState } from '@angular/core';
import { RouterOutlet } from '@angular/router';
import { AuthContext } from '@lfx-pcc/shared/interfaces';
import { AuthContext } from '@lfx-one/shared/interfaces';
import { ToastModule } from 'primeng/toast';

import { HeaderComponent } from './shared/components/header/header.component';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

import { CommonModule } from '@angular/common';
import { Component, computed, input, Signal } from '@angular/core';
import { CombinedProfile, UserStatistics } from '@lfx-pcc/shared/interfaces';
import { CombinedProfile, UserStatistics } from '@lfx-one/shared/interfaces';
import { CardComponent } from '@shared/components/card/card.component';

@Component({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { CommonModule } from '@angular/common';
import { Component, computed, inject, input, Signal, signal } from '@angular/core';
import { toSignal } from '@angular/core/rxjs-interop';
import { RouterModule } from '@angular/router';
import { CombinedProfile } from '@lfx-pcc/shared/interfaces';
import { CombinedProfile } from '@lfx-one/shared/interfaces';
import { UserService } from '@services/user.service';
import { AvatarComponent } from '@shared/components/avatar/avatar.component';
import { BreadcrumbComponent } from '@shared/components/breadcrumb/breadcrumb.component';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { Component, computed, inject, input, Signal, signal } from '@angular/cor
import { toSignal } from '@angular/core/rxjs-interop';
import { ActivatedRoute, RouterModule } from '@angular/router';
import { BreadcrumbComponent } from '@components/breadcrumb/breadcrumb.component';
import { FilterButton, Project } from '@lfx-pcc/shared/interfaces';
import { FilterButton, Project } from '@lfx-one/shared/interfaces';
import { ProjectService } from '@services/project.service';
import { MenuItem } from 'primeng/api';
import { ChipModule } from 'primeng/chip';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { CardComponent } from '@components/card/card.component';
import { ExpandableTextComponent } from '@components/expandable-text/expandable-text.component';
import { InputTextComponent } from '@components/input-text/input-text.component';
import { environment } from '@environments/environment';
import { extractUrlsWithDomains, Meeting, Project, User } from '@lfx-pcc/shared';
import { extractUrlsWithDomains, Meeting, Project, User } from '@lfx-one/shared';
import { MeetingTimePipe } from '@pipes/meeting-time.pipe';
import { MeetingService } from '@services/meeting.service';
import { UserService } from '@services/user.service';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { toSignal } from '@angular/core/rxjs-interop';
import { FormControl, FormGroup } from '@angular/forms';
import { InputTextComponent } from '@components/input-text/input-text.component';
import { ProjectCardComponent } from '@components/project-card/project-card.component';
import { Project, ProjectCard, ProjectCardMetric } from '@lfx-pcc/shared/interfaces';
import { Project, ProjectCard, ProjectCardMetric } from '@lfx-one/shared/interfaces';
import { ProjectService } from '@shared/services/project.service';
import { AnimateOnScrollModule } from 'primeng/animateonscroll';
import { SkeletonModule } from 'primeng/skeleton';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import { CommonModule } from '@angular/common';
import { Component, computed, inject, OnInit, signal } from '@angular/core';
import { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';
import { COUNTRIES, TSHIRT_SIZES, US_STATES } from '@lfx-pcc/shared';
import { CombinedProfile, UpdateProfileDetailsRequest, UpdateUserProfileRequest } from '@lfx-pcc/shared/interfaces';
import { COUNTRIES, TSHIRT_SIZES, US_STATES } from '@lfx-one/shared';
import { CombinedProfile, UpdateProfileDetailsRequest, UpdateUserProfileRequest } from '@lfx-one/shared/interfaces';
import { UserService } from '@services/user.service';
import { ButtonComponent } from '@shared/components/button/button.component';
import { CardComponent } from '@shared/components/card/card.component';
Expand Down
Loading