-
-
Notifications
You must be signed in to change notification settings - Fork 0
feat: implement talks pages with content and UI #15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
13 commits
Select commit
Hold shift + click to select a range
12c7648
fix: TailwindCSS custom class referencing in same style block
toddeTV e216ca1
feat: add content schema for talks
toddeTV ffb2bf2
feat: add content schema for testimonial and use it in talks
toddeTV d648e57
feat: add talk content
toddeTV 5612975
feat: add subpages for talk list and talk details with components
toddeTV 3edcaa1
docs: add comments to describe content schemas
toddeTV 5d4f1c6
refactor: general content page save folder to not to exclude all others
toddeTV 5d98ed6
refactor: talk schema value order
toddeTV 1e9761e
feat: add ogImage for talks, add & refactor ogImage components
toddeTV 0d9cbee
refactor: change avatar image from WEBP to JPG as Satori needs it
toddeTV 24a8922
chore: add CodeRabbitAi rules for ogImage satori templates
toddeTV ca5cc98
fix: various things from review feedback
toddeTV 7a536a9
feat: add datetime to time HTML tag
toddeTV File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,159 @@ | ||
| <script setup lang="ts"> | ||
| /** | ||
| * OG image component for talk pages. | ||
| * Rendered by Satori (not a browser) - must use inline styles and hardcoded colors. | ||
| */ | ||
| defineProps<{ | ||
| title?: string | ||
| event?: string | ||
| date?: string | ||
| location?: string | ||
| }>() | ||
|
|
||
| const iconColor = '#71717a' | ||
| </script> | ||
|
|
||
| <template> | ||
| <div | ||
| :style="{ | ||
| width: '1200px', | ||
| height: '630px', | ||
| display: 'flex', | ||
| flexDirection: 'column', | ||
| justifyContent: 'center', | ||
| backgroundColor: '#0a0a0b', | ||
| fontFamily: 'Inter, system-ui, sans-serif', | ||
| padding: '60px 80px', | ||
| position: 'relative', | ||
| overflow: 'hidden', | ||
| }" | ||
| > | ||
| <!-- Ambient glow effects --> | ||
| <OgImageGlow /> | ||
|
|
||
| <!-- Avatar - top right --> | ||
| <OgImageAvatar /> | ||
|
|
||
| <!-- Main content --> | ||
| <div | ||
| :style="{ | ||
| display: 'flex', | ||
| flexDirection: 'column', | ||
| flexWrap: 'nowrap', | ||
| maxWidth: '960px', | ||
| }" | ||
| > | ||
| <!-- Category label --> | ||
| <div | ||
| :style="{ | ||
| fontSize: '16px', | ||
| fontWeight: 600, | ||
| color: '#00dc82', | ||
| letterSpacing: '0.08em', | ||
| textTransform: 'uppercase', | ||
| marginBottom: '20px', | ||
| }" | ||
| > | ||
| Talk | ||
| </div> | ||
|
|
||
| <!-- Title --> | ||
| <div | ||
| :style="{ | ||
| fontSize: '64px', | ||
| fontWeight: 800, | ||
| color: '#fafafa', | ||
| lineHeight: 1.05, | ||
| letterSpacing: '-0.03em', | ||
| marginBottom: '24px', | ||
| }" | ||
| > | ||
| {{ title || 'Conference Talk' }} | ||
| </div> | ||
|
|
||
| <!-- Event name --> | ||
| <div | ||
| v-if="event" | ||
| :style="{ | ||
| fontSize: '26px', | ||
| fontWeight: 500, | ||
| color: '#a1a1aa', | ||
| lineHeight: 1.3, | ||
| }" | ||
| > | ||
| {{ event }} | ||
| </div> | ||
|
|
||
| <!-- Date and location row --> | ||
| <!-- | ||
| class="flex-row" prevents nuxt-og-image's flex plugin from overriding | ||
| flexDirection to 'column' (it does so for any div containing div children | ||
| unless the parent has a class containing "flex-"). | ||
| Text nodes use <span> to avoid being classified as block elements. | ||
| --> | ||
| <div | ||
| v-if="date || location" | ||
| class="flex-row" | ||
| :style="{ | ||
| display: 'flex', | ||
| flexDirection: 'row', | ||
| flexWrap: 'nowrap', | ||
| alignItems: 'center', | ||
| marginTop: '20px', | ||
| }" | ||
| > | ||
| <!-- Phosphor calendar-blank icon (regular weight) --> | ||
| <svg | ||
| v-if="date" | ||
| height="18" | ||
| :style="{ width: '18px', height: '18px', marginRight: '8px' }" | ||
| viewBox="0 0 256 256" | ||
| width="18" | ||
| xmlns="http://www.w3.org/2000/svg" | ||
| > | ||
| <path | ||
| d="M208 32h-24v-8a8 8 0 0 0-16 0v8H88v-8a8 8 0 0 0-16 0v8H48a16 16 0 0 0-16 16v160a16 16 0 0 0 16 16h160a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16M72 48v8a8 8 0 0 0 16 0v-8h80v8a8 8 0 0 0 16 0v-8h24v32H48V48Zm136 160H48V96h160z" | ||
| :fill="iconColor" | ||
| /> | ||
| </svg> | ||
| <span | ||
| v-if="date" | ||
| :style="{ | ||
| fontSize: '18px', | ||
| color: '#71717a', | ||
| fontFamily: 'monospace', | ||
| marginRight: location ? '32px' : '0', | ||
| }" | ||
| > | ||
| {{ date }} | ||
| </span> | ||
| <!-- Phosphor map-pin icon (regular weight) --> | ||
| <svg | ||
| v-if="location" | ||
| height="18" | ||
| :style="{ width: '18px', height: '18px', marginRight: '8px' }" | ||
| viewBox="0 0 256 256" | ||
| width="18" | ||
| xmlns="http://www.w3.org/2000/svg" | ||
| > | ||
| <path | ||
| d="M128 64a40 40 0 1 0 40 40a40 40 0 0 0-40-40m0 64a24 24 0 1 1 24-24a24 24 0 0 1-24 24m0-112a88.1 88.1 0 0 0-88 88c0 31.4 14.51 64.68 42 96.25a254.2 254.2 0 0 0 41.45 38.3a8 8 0 0 0 9.18 0a254.2 254.2 0 0 0 41.37-38.3c27.45-31.57 42-64.85 42-96.25a88.1 88.1 0 0 0-88-88m0 206c-16.53-13-72-60.75-72-118a72 72 0 0 1 144 0c0 57.23-55.47 105-72 118" | ||
| :fill="iconColor" | ||
| /> | ||
| </svg> | ||
| <span | ||
| v-if="location" | ||
| :style="{ | ||
| fontSize: '18px', | ||
| color: '#71717a', | ||
| }" | ||
| > | ||
| {{ location }} | ||
| </span> | ||
| </div> | ||
| </div> | ||
|
|
||
| <!-- Footer --> | ||
| <OgImageFooter /> | ||
| </div> | ||
| </template> | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| <script setup lang="ts"> | ||
| /** | ||
| * Shared avatar for non-Home OG image components. | ||
| * Renders a circular avatar with accent gradient border in the top-right corner. | ||
| * Satori constraints: inline styles only, no Tailwind, hardcoded colors. | ||
| */ | ||
| </script> | ||
|
|
||
| <template> | ||
| <div | ||
| :style="{ | ||
| position: 'absolute', | ||
| top: '48px', | ||
| right: '80px', | ||
| width: '130px', | ||
| height: '130px', | ||
| borderRadius: '50%', | ||
| background: 'linear-gradient(135deg, #00dc82, #27272a)', | ||
| padding: '4px', | ||
| flexWrap: 'nowrap', | ||
| }" | ||
| > | ||
| <img | ||
| alt="Thorsten Seyschab" | ||
| src="/avatar-thorsten-seyschab.jpg" | ||
| :style="{ | ||
| width: '120px', | ||
| height: '120px', | ||
| borderRadius: '50%', | ||
| objectFit: 'cover', | ||
| }" | ||
| > | ||
| </div> | ||
| </template> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.