diff --git a/docs/screenshots/README.md b/docs/screenshots/README.md new file mode 100644 index 0000000..74d39c2 --- /dev/null +++ b/docs/screenshots/README.md @@ -0,0 +1,30 @@ +# EchoEd Screenshots + +Screenshots captured from the local Angular app at `http://127.0.0.1:4200`. + +## Files + +- `landing-desktop.png` - public landing page desktop viewport. +- `landing-mobile.png` - public landing page mobile viewport. +- `login-demo-entry.png` - login and demo entry screen. +- `registration-request-demo.png` - account creation/request demo screen. +- `student-dashboard.png` - seeded demo student dashboard. +- `teacher-dashboard.png` - seeded demo teacher dashboard. +- `intro-africa-storybook-in-progress.png` - Introduction to Africa lesson in progress with a storybook open. +- `social/` - social-ready screenshots for launch posts, link previews, and feed posts. + +## Social Screenshots + +- `social/echoed-landing-linkedin-1200x630.png` - landscape landing page image for LinkedIn, X, Facebook, and link previews. +- `social/echoed-demo-login-1200x630.png` - demo access/login image for posts explaining how to try EchoEd. +- `social/echoed-student-dashboard-1200x630.png` - student experience image for educator-facing posts. +- `social/echoed-teacher-dashboard-1200x630.png` - teacher dashboard image for educator and school-facing posts. +- `social/echoed-storybook-linkedin-1200x630.png` - Introduction to Africa storybook image for launch posts. +- `social/echoed-storybook-square-1080x1080.png` - square storybook image for feed posts. +- `social/echoed-landing-portrait-1080x1350.png` - portrait landing page image for feed posts. + +## Notes + +- Public-page screenshots were captured from the frontend dev server. +- Dashboard screenshots were captured from the local app with the backend running against seeded demo data. +- Do not include real student, school, personal, or production data in demo screenshots. diff --git a/docs/screenshots/intro-africa-storybook-in-progress.png b/docs/screenshots/intro-africa-storybook-in-progress.png new file mode 100644 index 0000000..8c3a638 Binary files /dev/null and b/docs/screenshots/intro-africa-storybook-in-progress.png differ diff --git a/docs/screenshots/landing-desktop.png b/docs/screenshots/landing-desktop.png new file mode 100644 index 0000000..4175084 Binary files /dev/null and b/docs/screenshots/landing-desktop.png differ diff --git a/docs/screenshots/landing-mobile.png b/docs/screenshots/landing-mobile.png new file mode 100644 index 0000000..cfa72d1 Binary files /dev/null and b/docs/screenshots/landing-mobile.png differ diff --git a/docs/screenshots/login-demo-entry.png b/docs/screenshots/login-demo-entry.png new file mode 100644 index 0000000..5a9f01f Binary files /dev/null and b/docs/screenshots/login-demo-entry.png differ diff --git a/docs/screenshots/registration-request-demo.png b/docs/screenshots/registration-request-demo.png new file mode 100644 index 0000000..ae1e0cc Binary files /dev/null and b/docs/screenshots/registration-request-demo.png differ diff --git a/docs/screenshots/social/echoed-demo-login-1200x630.png b/docs/screenshots/social/echoed-demo-login-1200x630.png new file mode 100644 index 0000000..9640f63 Binary files /dev/null and b/docs/screenshots/social/echoed-demo-login-1200x630.png differ diff --git a/docs/screenshots/social/echoed-landing-linkedin-1200x630.png b/docs/screenshots/social/echoed-landing-linkedin-1200x630.png new file mode 100644 index 0000000..b02ea0c Binary files /dev/null and b/docs/screenshots/social/echoed-landing-linkedin-1200x630.png differ diff --git a/docs/screenshots/social/echoed-landing-portrait-1080x1350.png b/docs/screenshots/social/echoed-landing-portrait-1080x1350.png new file mode 100644 index 0000000..7484685 Binary files /dev/null and b/docs/screenshots/social/echoed-landing-portrait-1080x1350.png differ diff --git a/docs/screenshots/social/echoed-storybook-linkedin-1200x630.png b/docs/screenshots/social/echoed-storybook-linkedin-1200x630.png new file mode 100644 index 0000000..0c9dd54 Binary files /dev/null and b/docs/screenshots/social/echoed-storybook-linkedin-1200x630.png differ diff --git a/docs/screenshots/social/echoed-storybook-square-1080x1080.png b/docs/screenshots/social/echoed-storybook-square-1080x1080.png new file mode 100644 index 0000000..97d020f Binary files /dev/null and b/docs/screenshots/social/echoed-storybook-square-1080x1080.png differ diff --git a/docs/screenshots/social/echoed-student-dashboard-1200x630.png b/docs/screenshots/social/echoed-student-dashboard-1200x630.png new file mode 100644 index 0000000..593f843 Binary files /dev/null and b/docs/screenshots/social/echoed-student-dashboard-1200x630.png differ diff --git a/docs/screenshots/social/echoed-teacher-dashboard-1200x630.png b/docs/screenshots/social/echoed-teacher-dashboard-1200x630.png new file mode 100644 index 0000000..3215bed Binary files /dev/null and b/docs/screenshots/social/echoed-teacher-dashboard-1200x630.png differ diff --git a/docs/screenshots/student-dashboard.png b/docs/screenshots/student-dashboard.png new file mode 100644 index 0000000..ff95d47 Binary files /dev/null and b/docs/screenshots/student-dashboard.png differ diff --git a/docs/screenshots/teacher-dashboard.png b/docs/screenshots/teacher-dashboard.png new file mode 100644 index 0000000..3781a81 Binary files /dev/null and b/docs/screenshots/teacher-dashboard.png differ diff --git a/frontend/src/app/components/demo-tour-overlay/demo-tour-overlay.component.html b/frontend/src/app/components/demo-tour-overlay/demo-tour-overlay.component.html index 0b349c1..f7043f3 100644 --- a/frontend/src/app/components/demo-tour-overlay/demo-tour-overlay.component.html +++ b/frontend/src/app/components/demo-tour-overlay/demo-tour-overlay.component.html @@ -18,7 +18,7 @@

{{ step.title }}

- Guided investor-ready walkthrough + Guided community walkthrough
- Pitch ready + Walkthrough ready
  1. @@ -120,11 +120,11 @@ import { RouterModule } from '@angular/router'; `, styles: [` code { background: #102033; border-radius: 8px; color: #fff; display: block; font-weight: 800; overflow-x: auto; padding: .9rem; } - .pitch-strip { display: grid; gap: .75rem; grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr)); } - .pitch-strip article { background: #fff; border: 1px solid #d8e1ea; border-radius: 8px; box-shadow: 0 14px 32px rgba(16,32,51,.08); display: grid; gap: .35rem; padding: 1rem; } - .pitch-strip span { color: #0f766e; font-size: .72rem; font-weight: 900; text-transform: uppercase; } - .pitch-strip strong { color: #102033; } - .pitch-strip p { color: #526273; margin: 0; } + .community-strip { display: grid; gap: .75rem; grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr)); } + .community-strip article { background: #fff; border: 1px solid #d8e1ea; border-radius: 8px; box-shadow: 0 14px 32px rgba(16,32,51,.08); display: grid; gap: .35rem; padding: 1rem; } + .community-strip span { color: #0f766e; font-size: .72rem; font-weight: 900; text-transform: uppercase; } + .community-strip strong { color: #102033; } + .community-strip p { color: #526273; margin: 0; } .demo-flow { counter-reset: none; display: grid; gap: .85rem; list-style: none; margin: 0; padding: 0; } .demo-flow li { border: 1px solid #d8e1ea; border-radius: 8px; display: grid; gap: .85rem; grid-template-columns: 5.5rem 1fr; padding: 1rem; } .demo-flow li > span { align-items: center; background: #e7f7f4; border-radius: 999px; color: #0f766e; display: inline-flex; font-weight: 900; height: 2.2rem; justify-content: center; padding: 0 .75rem; width: fit-content; } diff --git a/frontend/src/app/pages/product-detail/product-detail.component.ts b/frontend/src/app/pages/product-detail/product-detail.component.ts index 6139a2d..f1a369a 100644 --- a/frontend/src/app/pages/product-detail/product-detail.component.ts +++ b/frontend/src/app/pages/product-detail/product-detail.component.ts @@ -46,11 +46,11 @@ import { V2PlatformService } from '../../services/v2-platform.service'; {{ product.access_state }}
    - Commercial URL + Public URL {{ product.slug ? '/products/' + product.slug : 'Generated when published' }}
    - Pricing placeholder + Access model {{ product.price_placeholder || label(product.pricing_model || 'internal') }}
    @@ -63,7 +63,7 @@ import { V2PlatformService } from '../../services/v2-platform.service';
    - Product shell details are additive. Wrapper publishing does not override existing lesson governance, create enrollments, execute checkout, or expose runtime lessons outside existing readiness rules. + Product shell details are additive. Wrapper publishing does not override existing lesson governance, create enrollments, or expose runtime lessons outside existing readiness rules.
    diff --git a/frontend/src/app/pages/product-studio/product-studio.component.ts b/frontend/src/app/pages/product-studio/product-studio.component.ts index f09c3f2..27edade 100644 --- a/frontend/src/app/pages/product-studio/product-studio.component.ts +++ b/frontend/src/app/pages/product-studio/product-studio.component.ts @@ -86,7 +86,7 @@ const PRODUCT_TYPES = [ -
    +
    Knowledge InConnect project sources

    Product work starts from traceable workspace knowledge.

    AI UnderstandingPrepare analysis safely

    Generation remains marked as future work in this phase.

    ReviewGovern artifacts and products

    Review status is additive and does not publish lessons.

    @@ -165,12 +165,12 @@ const PRODUCT_TYPES = [ @@ -267,11 +267,11 @@ const PRODUCT_TYPES = [ .type-grid button span { color: var(--ee-gold); font-size: .76rem; font-weight: 900; text-transform: uppercase; } .type-grid button strong { color: var(--ee-text); } .type-grid .type-card--active { background: rgba(124,58,237,.2); border-color: rgba(167,139,250,.42); box-shadow: inset 0 0 0 1px rgba(167,139,250,.18); } - .pitch-cards { grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr)); } - .pitch-cards article { animation: ee-motion-card-enter var(--ee-duration-slow, 260ms) var(--ee-easing-standard, ease) both; border: 1px solid var(--ee-border); border-radius: 18px; display: grid; gap: .3rem; padding: .9rem; transition: transform var(--ee-duration-base, 180ms) var(--ee-easing-standard, ease); } - .pitch-cards article:hover { transform: var(--ee-hover-lift, translateY(-3px)); } - .pitch-cards span { color: var(--ee-gold); font-size: .72rem; font-weight: 900; text-transform: uppercase; } - .pitch-cards p { color: var(--ee-text-soft); margin: 0; } + .workflow-cards { grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr)); } + .workflow-cards article { animation: ee-motion-card-enter var(--ee-duration-slow, 260ms) var(--ee-easing-standard, ease) both; border: 1px solid var(--ee-border); border-radius: 18px; display: grid; gap: .3rem; padding: .9rem; transition: transform var(--ee-duration-base, 180ms) var(--ee-easing-standard, ease); } + .workflow-cards article:hover { transform: var(--ee-hover-lift, translateY(-3px)); } + .workflow-cards span { color: var(--ee-gold); font-size: .72rem; font-weight: 900; text-transform: uppercase; } + .workflow-cards p { color: var(--ee-text-soft); margin: 0; } .grid { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fit, minmax(min(24rem, 100%), 1fr)); } .panel { display: grid; gap: 1rem; padding: clamp(1rem, 3vw, 1.5rem); } label { color: var(--ee-text-soft); display: grid; font-weight: 800; gap: .4rem; } @@ -284,7 +284,7 @@ const PRODUCT_TYPES = [ .product-list article { align-items: center; background: rgba(255,255,255,.045); border: 1px solid var(--ee-border); border-radius: 1rem; display: flex; gap: 1rem; justify-content: space-between; padding: 1rem; transition: transform var(--ee-duration-base, 180ms) var(--ee-easing-standard, ease); } .product-list article:hover { transform: var(--ee-hover-lift, translateY(-3px)); } .runtime { color: var(--ee-azure) !important; font-weight: 800; } - @media (prefers-reduced-motion: reduce) { .workflow li, .pitch-cards article, .status { animation: none; } .workflow li:hover, .pitch-cards article:hover, .product-list article:hover { transform: none; } } + @media (prefers-reduced-motion: reduce) { .workflow li, .workflow-cards article, .status { animation: none; } .workflow li:hover, .workflow-cards article:hover, .product-list article:hover { transform: none; } } `] }) export class ProductStudioComponent implements OnInit { @@ -383,9 +383,9 @@ export class ProductStudioComponent implements OnInit { access_state: this.selectedCourseId ? 'existing_runtime' : 'private', visibility: this.visibility, pricing_model: this.pricingModel, - price_placeholder: this.pricingModel === 'paid' ? 'Price placeholder - checkout not connected' : null, + price_placeholder: this.pricingModel === 'paid' ? 'Access details pending' : null, currency: this.pricingModel === 'paid' ? 'USD' : null, - metadata: { source: 'product_studio_phase_3', ai_generation: 'not_implemented', checkout: 'not_implemented' }, + metadata: { source: 'product_studio_phase_3', ai_generation: 'not_implemented', access_workflow: 'manual' }, }).subscribe({ next: product => { this.statusMessage = `Product shell ready: ${product.title}`; diff --git a/frontend/src/app/pages/public-products/public-product-detail.component.ts b/frontend/src/app/pages/public-products/public-product-detail.component.ts index 2457622..f07d220 100644 --- a/frontend/src/app/pages/public-products/public-product-detail.component.ts +++ b/frontend/src/app/pages/public-products/public-product-detail.component.ts @@ -13,14 +13,14 @@ import { V2PlatformService } from '../../services/v2-platform.service';

    {{ label(product.category || product.product_type) }}

    {{ product.title }}

    - {{ product.subtitle || product.description || 'Commercial product preview.' }} - + {{ product.subtitle || product.description || 'Community product preview.' }} +

    Overview

    -

    {{ product.description || 'Product overview will be refined before checkout is connected.' }}

    +

    {{ product.description || 'Product overview will be refined as community review continues.' }}

    Curriculum summary

    @@ -36,16 +36,16 @@ import { V2PlatformService } from '../../services/v2-platform.service';

    Requirements

    -

    {{ product.audience || 'Audience and prerequisites are placeholders for commercialization readiness.' }}

    +

    {{ product.audience || 'Audience and prerequisites are placeholders for community readiness.' }}

    Resources

    Resources and downloads will be connected through future product packaging work.

    diff --git a/frontend/src/app/pages/public-products/public-products.component.ts b/frontend/src/app/pages/public-products/public-products.component.ts index 8803dc3..2a407e1 100644 --- a/frontend/src/app/pages/public-products/public-products.component.ts +++ b/frontend/src/app/pages/public-products/public-products.component.ts @@ -13,7 +13,7 @@ import { V2PlatformService } from '../../services/v2-platform.service';

    Products

    Learning products built from trusted knowledge

    - Commercial pages are preview-ready. Pricing and enrollment actions are placeholders until checkout is implemented. + Public previews are ready for community review. Access actions stay bounded to the demo and existing learner runtime.
    @@ -35,7 +35,7 @@ import { V2PlatformService } from '../../services/v2-platform.service';

    No public products yet

    -

    Publish a Product wrapper with public visibility to preview commercial product pages.

    +

    Publish a Product wrapper with public visibility to preview community-facing product pages.

    diff --git a/frontend/src/app/pages/workspace-dashboard/workspace-dashboard.component.ts b/frontend/src/app/pages/workspace-dashboard/workspace-dashboard.component.ts index b56a5e1..fb89585 100644 --- a/frontend/src/app/pages/workspace-dashboard/workspace-dashboard.component.ts +++ b/frontend/src/app/pages/workspace-dashboard/workspace-dashboard.component.ts @@ -40,7 +40,7 @@ import { V2PlatformService } from '../../services/v2-platform.service'; -
    +
    Knowledge InSources enter projects

    Expert knowledge becomes reusable workspace context.

    AI UnderstandingArtifacts capture output

    Generation metadata is visible without executing AI yet.

    ReviewGovernance protects trust

    Wrapper status never overrides lesson readiness.

    @@ -170,11 +170,11 @@ import { V2PlatformService } from '../../services/v2-platform.service'; styles: [` .flow { display: grid; gap: .5rem; grid-template-columns: repeat(auto-fit, minmax(8.5rem, 1fr)); list-style: none; margin: 0; padding: 0; } .flow li { background: rgba(255,255,255,.055); border: 1px solid var(--ee-border); border-radius: 18px; color: var(--ee-text); font-weight: 900; padding: .95rem; text-align: center; } - .pitch-strip { display: grid; gap: .75rem; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); } - .pitch-strip article { background: linear-gradient(145deg, rgba(255,255,255,.095), rgba(255,255,255,.035)); border: 1px solid var(--ee-border); border-radius: 20px; box-shadow: var(--ee-shadow-soft); display: grid; gap: .3rem; padding: 1rem; } - .pitch-strip span { color: var(--ee-gold); font-size: .72rem; font-weight: 900; text-transform: uppercase; } - .pitch-strip strong { color: var(--ee-text); } - .pitch-strip p { color: var(--ee-text-soft); margin: 0; } + .lifecycle-strip { display: grid; gap: .75rem; grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr)); } + .lifecycle-strip article { background: linear-gradient(145deg, rgba(255,255,255,.095), rgba(255,255,255,.035)); border: 1px solid var(--ee-border); border-radius: 20px; box-shadow: var(--ee-shadow-soft); display: grid; gap: .3rem; padding: 1rem; } + .lifecycle-strip span { color: var(--ee-gold); font-size: .72rem; font-weight: 900; text-transform: uppercase; } + .lifecycle-strip strong { color: var(--ee-text); } + .lifecycle-strip p { color: var(--ee-text-soft); margin: 0; } .compact { display: grid; gap: .65rem; margin: 0; } .compact div { border-top: 1px solid var(--ee-border); display: grid; gap: .2rem; padding-top: .65rem; } dt { color: var(--ee-text-muted); font-size: .74rem; font-weight: 900; text-transform: uppercase; } diff --git a/frontend/src/app/services/demo-tour.service.ts b/frontend/src/app/services/demo-tour.service.ts index a6d9c48..dc8f9b2 100644 --- a/frontend/src/app/services/demo-tour.service.ts +++ b/frontend/src/app/services/demo-tour.service.ts @@ -20,7 +20,7 @@ export class DemoTourService { { id: 'landing', title: 'Landing page', - description: 'This is the marketing page for school leaders and investors to explore the mission.', + description: 'This is the community page for educators, families, organizers, and contributors to explore the mission.', route: '/', }, { diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 91234b8..10c4c86 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -997,7 +997,9 @@ select option { .ee-grid > *, .ee-list > *, .ee-timeline > *, -.pitch-strip > *, +.lifecycle-strip > *, +.community-strip > *, +.workflow-cards > *, .cards > *, .grid > *, .registry > *, @@ -1009,7 +1011,9 @@ select option { .ee-grid > :nth-child(1), .ee-list > :nth-child(1), .ee-timeline > :nth-child(1), -.pitch-strip > :nth-child(1), +.lifecycle-strip > :nth-child(1), +.community-strip > :nth-child(1), +.workflow-cards > :nth-child(1), .cards > :nth-child(1), .grid > :nth-child(1), .registry > :nth-child(1), @@ -1019,7 +1023,9 @@ select option { .ee-grid > :nth-child(2), .ee-list > :nth-child(2), .ee-timeline > :nth-child(2), -.pitch-strip > :nth-child(2), +.lifecycle-strip > :nth-child(2), +.community-strip > :nth-child(2), +.workflow-cards > :nth-child(2), .cards > :nth-child(2), .grid > :nth-child(2), .registry > :nth-child(2), @@ -1029,7 +1035,9 @@ select option { .ee-grid > :nth-child(3), .ee-list > :nth-child(3), .ee-timeline > :nth-child(3), -.pitch-strip > :nth-child(3), +.lifecycle-strip > :nth-child(3), +.community-strip > :nth-child(3), +.workflow-cards > :nth-child(3), .cards > :nth-child(3), .grid > :nth-child(3), .registry > :nth-child(3), @@ -1039,7 +1047,9 @@ select option { .ee-grid > :nth-child(4), .ee-list > :nth-child(4), .ee-timeline > :nth-child(4), -.pitch-strip > :nth-child(4), +.lifecycle-strip > :nth-child(4), +.community-strip > :nth-child(4), +.workflow-cards > :nth-child(4), .cards > :nth-child(4), .grid > :nth-child(4), .registry > :nth-child(4), @@ -1078,7 +1088,9 @@ select option { .ee-grid > *, .ee-list > *, .ee-timeline > *, - .pitch-strip > *, + .lifecycle-strip > *, + .community-strip > *, + .workflow-cards > *, .cards > *, .grid > *, .registry > *,