Skills Academy Integration
Skills Academy Integration
The Skills Academy is part of the main TEEI website (theeducationalequalityinstitute.org/skills-academy/) and provides DataCamp, eCornell, Splunk, and Automation Anywhere courses to TEEI programme participants. Learners are authenticated via a volunteer_session cookie.
How it differs from the main website
The Skills Academy is not a separate Astro project — it lives within the main site. The difference is auth: learners are logged in with a volunteer_session cookie, which means they should receive volunteer-level knowledge content (more than public, but not manager-level).
| Aspect | Main Website | Skills Academy |
|---|---|---|
| URL base | / | /skills-academy/ |
| Auth | None (public) | volunteer_session cookie |
| Role | public | volunteer |
| Platform value | website | skills-academy |
Prerequisites
@teei/chat-widgetinstalled- Main website already has the widget installed (see Main Website integration)
volunteer_sessioncookie set when learner is authenticated- RAG Worker running at
https://knowledge-api.theeducationalequalityinstitute.org
Integration approach
The Skills Academy pages use the main site’s base layout. The cleanest integration is to detect the Skills Academy route and swap the platform and role — without requiring a separate layout.
Option A — Route-based detection in BaseLayout.astro (recommended):
---// In BaseLayout.astro, after existing imports:import { ChatProvider, ChatWidget } from '@teei/chat-widget';
const path = Astro.url.pathname;const isSkillsAcademy = path.startsWith('/skills-academy/');
// Check for volunteer session cookieconst volunteerSession = Astro.cookies.get('volunteer_session')?.value;const isAuthenticated = Boolean(volunteerSession);
// Determine platform and roleconst widgetPlatform = isSkillsAcademy ? 'skills-academy' : 'website';const widgetRole = (isSkillsAcademy && isAuthenticated) ? 'volunteer' : 'public';const lang = Astro.currentLocale ?? 'en';---Then in the body:
{showWidget && ( <ChatProvider client:idle apiUrl="https://knowledge-api.theeducationalequalityinstitute.org" platform={widgetPlatform} userRole={widgetRole} language={lang} > <ChatWidget greeting={isSkillsAcademy ? "Hi! I can help you with Skills Academy courses, how to access DataCamp or eCornell, and programme requirements. What do you need?" : "Hi! I'm the TEEI Knowledge Assistant. What would you like to know?" } /> </ChatProvider> )}Option B — Dedicated SkillsAcademyLayout.astro (if the Skills Academy has its own layout):
---import { ChatProvider, ChatWidget } from '@teei/chat-widget';import '@teei/chat-widget/styles';
// Read volunteer sessionconst volunteerSession = Astro.cookies.get('volunteer_session')?.value;const userRole = volunteerSession ? 'volunteer' : 'public';const lang = Astro.currentLocale ?? 'en';---
<html> <body> <slot />
<ChatProvider client:idle apiUrl="https://knowledge-api.theeducationalequalityinstitute.org" platform="skills-academy" userRole={userRole} language={lang} > <ChatWidget greeting="Hi! I can help with DataCamp, eCornell, Splunk, and Automation Anywhere access, as well as programme requirements and certifications." /> </ChatProvider> </body></html>Skills Academy-specific knowledge content
Tag Skills Academy content for the skills-academy platform and volunteer role in Vectorize. This includes:
- Course access instructions (DataCamp, eCornell, Splunk, Automation Anywhere, BOOKR Class)
- Certification pathways and requirements
- How to access the itslearning LMS
- Skills Academy programme overview and eligibility
- Technical troubleshooting (browser requirements, login issues with external platforms)
Ingest this content:
cd teei-knowledgenode scripts/ingest.mjs \ --platform skills-academy \ --role volunteer \ --dir docs/src/content/docs/en/platforms/skills-academy/Course platform integrations (external)
DataCamp, eCornell, Splunk, and Automation Anywhere are external platforms. The chat widget cannot answer questions about content inside those platforms — only about TEEI’s processes for accessing them.
Clearly document in the knowledge content what the widget can and cannot answer:
| Question type | Widget can answer |
|---|---|
| ”How do I get a DataCamp invitation?” | Yes |
| ”What courses are available on DataCamp?” | Yes (general list) |
| “How do I solve this DataCamp exercise?” | No — DataCamp-specific |
| ”Where is my eCornell certificate?” | Yes (eCornell login → Credentials page) |
| “What does the Splunk course cover?” | Yes (overview only) |
Verification checklist
- Widget appears on
/skills-academy/withplatform="skills-academy" - Unauthenticated visit to
/skills-academy/→userRole="public"in API request - Authenticated visit (with
volunteer_sessioncookie) →userRole="volunteer"in API request - Volunteer-specific content returned (course access instructions)
- Widget on other main site pages still uses
platform="website"anduserRole="public" - No build errors:
npx astro check && npm run build
Gotchas
DataCamp cookie name conflict: DataCamp uses cookies for their own session management when embedded. These are third-party cookies on a different domain — they do not conflict with volunteer_session. No action needed.
BOOKR Class iframes: Some Skills Academy pages embed BOOKR Class reading content in iframes. Iframes create a stacking context. If the chat widget panel appears behind a BOOKR iframe, add z-index: -1 to the iframe’s container rather than raising the widget’s z-index.
External platform logins: Learners often ask how to log in to DataCamp, eCornell, etc. These answers depend on the invitation email flow TEEI manages. Ensure the knowledge content includes the exact steps TEEI uses to grant access — not the generic platform onboarding flow.
Certificate verification: eCornell and Automation Anywhere certificates are issued on the external platform. The widget can explain where to find certificates (the external platform’s credential page) but cannot fetch or display them.