| name | NG-DE Content Management |
| description | Load this skill when the user wants to add, update, or remove speakers, talks, sessions, sponsors, or workshops on the ng-de.org conference website. Also load when validating content consistency or managing schedule entries. |
| version | 1.0.0 |
NG-DE Content Management
This skill provides complete knowledge of the ng-de.org content data model, file locations, and conventions for managing conference content.
Project Root
The ng-de.org project lives at: /Users/robinboehm/development/ng-de.org
All paths below are relative to this root.
Data Files and Locations
Speakers
File: src/app/services/speaker.service.ts
Format: TypeScript array of Speaker objects inside a signal<Speaker[]>([...]) call.
Speaker interface:
{
id: string;
name: string;
title: string;
company: string;
bio: string;
imageUrl: string;
githubHandle?: string;
pronouns?: string;
angularTeam?: boolean;
ngrxTeam?: boolean;
virtual?: boolean;
mc?: boolean;
}
ID convention: Convert full name to lowercase kebab-case. "Jane Doe" → jane-doe. "Dr. Jim Sellmeijer" → jim-sellmeijer.
Image handling: When user provides an image URL, set imageUrl to the provided URL directly (e.g. "https://example.com/photo.jpg"). Do NOT use local asset paths unless the image is already in src/assets/images/speakers/.
Insertion point: Add new speaker objects inside the signal<Speaker[]>([ array, before the closing ]).
Talks
File: src/assets/talks-2025.json
Format: JSON array of Talk objects.
Talk interface:
{
"id": "talk-day1-9",
"title": "Talk title here",
"abstract": "Full abstract text",
"speakerId": "jane-doe",
"time": "14:15 - 14:45",
"day": "day1",
"room": "Pool House"
}
ID convention: Use talk-day1-N or talk-day2-N where N is the next available number. Keynotes use keynote-day1 / keynote-day2.
day values: "day1" = Thursday (first conference day), "day2" = Friday (second conference day).
room values: "Pool House" or "Aula".
speakerId: Must match an existing speaker id in speaker.service.ts.
Schedule
File: src/assets/schedule.json
Format: JSON array of ScheduleDay objects, each with an entries array.
ScheduleEntry interface:
{
"title": "Talk",
"datetime": "2025-11-06T14:15:00",
"information": "Speaker Name",
"location": "Pool House",
"session": "talk-day1-9"
}
datetime format: ISO 8601, always use the conference dates:
- Day 1 (Thursday):
2025-11-06
- Day 2 (Friday):
2025-11-07
session field: References a talk id from talks-2025.json, or null for non-talk entries (breaks, registration, etc.).
information field: Usually the speaker's name, or a description for non-talk entries.
Sponsors
File: src/app/services/sponsor.service.ts
Format: TypeScript array of Sponsor objects inside a signal<Sponsor[]>([...]) call.
Sponsor interface:
{
id: string;
name: string;
logoUrl: string;
websiteUrl: string;
level: 'Platinum' | 'Gold' | 'Silver' | 'Bronze' | 'Travel' | 'Community Partners';
}
Image handling: When user provides a logo URL, set logoUrl to that URL directly.
Workshops
File: src/app/services/workshop.service.ts
Format: TypeScript array of Workshop objects inside a signal<Workshop[]>([...]) call.
Workshop interface:
{
id: string;
title: string;
abstract: string;
teaser: string;
trainerId: string;
duration: string;
capacity: number;
room: string;
address: string;
benefits?: string[];
outline?: { title: string; topics: string[] }[];
targetAudience?: string;
soldOut?: boolean;
}
Validation Rules
When editing or validating content, always check:
- Speaker ID consistency: Every
speakerId in talks-2025.json must match an id in speaker.service.ts
- Trainer ID consistency: Every
trainerId in workshop.service.ts must match an id in speaker.service.ts
- Schedule session consistency: Every non-null
session in schedule.json must match a talk id in talks-2025.json
- No duplicate IDs: Speaker IDs, talk IDs, sponsor IDs must all be unique within their respective files
- Required fields: All REQUIRED fields must be present and non-empty
- day values: Only
"day1" or "day2" allowed in talks
- Sponsor levels: Only the six defined levels allowed
Common Operations
Adding a speaker
- Read
src/app/services/speaker.service.ts
- Determine the new speaker's
id from their name (kebab-case)
- Check the id is not already taken
- Add the new Speaker object to the array (before the closing
])
- If a talk is also being added, proceed to add the talk
Adding a talk
- Read
src/assets/talks-2025.json
- Find the highest existing talk number for the day (e.g.
talk-day1-8 → next is talk-day1-9)
- Confirm the
speakerId exists in speaker.service.ts
- Append the new Talk object to the JSON array
- Ask user if they want to add the talk to the schedule too
Adding a schedule entry
- Read
src/assets/schedule.json
- Find the correct day object (
day1 = Thursday entry with datetime: "2025-11-06")
- Add the new entry in chronological order within the day's
entries array
- Mirror the entry for the other room if it's a simulcast (Aula live stream)
Adding a sponsor
- Read
src/app/services/sponsor.service.ts
- Add the Sponsor object to the array
Conference Facts
- Conference name: NG-DE 2025
- Dates: November 6-7, 2025 (Thursday-Friday)
- Location: Hotel Oderberger, Berlin, Germany
- Rooms: Pool House (main stage), Aula (second stage / overflow)
- Workshop day: November 5, 2025 (Wednesday, day before conference)
- Website: https://ng-de.org