Skip to content

feat: add content and style (撰寫參與指南內容)#240

Open
hpcslag wants to merge 4 commits into
COSCUP:mainfrom
hpcslag:main
Open

feat: add content and style (撰寫參與指南內容)#240
hpcslag wants to merge 4 commits into
COSCUP:mainfrom
hpcslag:main

Conversation

@hpcslag

@hpcslag hpcslag commented Jul 1, 2026

Copy link
Copy Markdown
Member

Summary

This update expands the COSCUP 2026 participation guide with bilingual content, makes the new pages discoverable from the main navigation, and adds styled Markdown callout support for highlighted information blocks.

The main changes include:

  • Added Chinese and English participation guide content.
  • Added styled callout sections based on last year's highlight patterns, including :::info, :::tip, :::warning, and :::danger.
  • Added the new participation pages to the navigation menu, plus a top-level Fringe Events / BoF link.

Changes

Participation Guide Content

Added bilingual participation guide pages under content/en/participate and content/zh/participate.

New guide pages include:

  • Participation guide overview.
  • First timer guide.
  • Activity participation guide.
  • Speaker participation guide.
  • Welcome party information.
  • Overseas visitor guide.
  • Open source communities, booths, and session tracks.
  • Sponsorship partner guide.

Also added welcome party space map images:

  • public/participate/welcome-party/space-en.png
  • public/participate/welcome-party/space-zh.png

Navigation

Updated the main navigation so the participation guide pages are reachable from the menu.

Added menu entries for:

  • Participate Guide.
  • First Timer.
  • Activity.
  • Speaker Participation.
  • Welcome Party.
  • For Overseas Visitors.
  • Open Source Communities, Booths, and Session Tracks.
  • Sponsorship Partners.
  • Invitation Letter Guide.

Also added a top-level Fringe Events / BoF menu item that opens the related Google Docs page in a new browser tab.

Markdown Highlight Styles

Added support for styled Markdown callout blocks used in participation guide content.

Supported callout components:

  • :::info
  • :::tip
  • :::warning
  • :::danger

Each callout supports an optional title and uses a distinct visual style for better readability.

Inline Code Styling

Added global prose styling for inline Markdown code so inline code snippets render with a neutral gray background, border, and readable text color.

The styling also removes the default generated backticks around inline code.

Notes

  • The changes are focused on content structure, navigation discoverability, and Markdown rendering support.
  • No route changes were introduced for existing pages.

Summary by CodeRabbit

  • New Features
    • Added new “danger” callout plus “tip” and “warning” callouts, and refreshed the “info” callout styling.
    • Expanded the Participate Guide with new English and Chinese pages, including first-time, activity, speaker participation, sponsorship partners, overseas visitors, open source communities, and the welcome party.
  • Bug Fixes
    • Improved rich-text inline code styling within prose.
    • Updated navigation so selected links open in a new tab with safe browsing attributes.
  • Refactor
    • Improved dropdown visibility handling to better preserve layout behavior.

@rileychh-dokploy-coscup

rileychh-dokploy-coscup Bot commented Jul 1, 2026

Copy link
Copy Markdown

Dokploy Preview Deployment

Name Status Preview Updated (UTC)
Nuxt ✅ Done Preview URL 2026-07-06T03:06:09.446Z

@coderabbitai

coderabbitai Bot commented Jul 1, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds new shared callout components, updates global prose and navbar behavior, and introduces a broad set of English and Chinese participate-guide pages covering attendee, speaker, sponsor, community, overseas, and welcome-party information.

Changes

UI Components, Styling, and Navigation

Layer / File(s) Summary
New callout components and Info restyle
app/components/content/Danger.vue, app/components/content/Tip.vue, app/components/content/Warning.vue, app/components/content/Info.vue
Adds Danger, Tip, and Warning components with optional title props rendered as styled <aside> callouts, and restyles Info.vue to use an aside wrapper with conditional title rendering.
Prose code styling and Nuxt CSS wiring
app/assets/css/main.css, nuxt.config.ts
Adds .prose code styling for inline code and clears pseudo-element content, then registers the stylesheet in Nuxt's global CSS config.
Navbar menu items and new-page link handling
app/components/shared/CpNavbar.vue
Extends the participate menu with additional routes, adds a newPage flag for external links, applies conditional target and rel, and adds matching English and Chinese labels.
Dropdown visibility toggle
app/components/shared/CpDropdown.vue
Switches the dropdown menu from conditional rendering to v-show visibility toggling while keeping the element mounted.

Estimated code review effort: 2 (Simple) | ~15 minutes

Participate Guide Content Pages

Layer / File(s) Summary
Participate index and first-time guides (en/zh)
content/en/participate/index.md, content/en/participate/first-time.md, content/zh/participate/index.md, content/zh/participate/first-time.md
Adds the participate landing pages and first-time attendee guides in English and Chinese with links to subpages.
Activity guides (en/zh)
content/en/participate/activity.md, content/zh/participate/activity.md
Adds the participant activity guides in English and Chinese, covering venue access, schedule planning, session formats, attendee services, and surveys.
Open source community guides (en/zh)
content/en/participate/open-source-community.md, content/zh/participate/open-source-community.md
Adds session track, booth setup, stamp collection, bulletin board, and support guidance for open source community participants in English and Chinese.
Overseas visitor guides (en/zh)
content/en/participate/oversea.md, content/zh/participate/oversea.md
Adds pre-arrival, transportation, payments, food, language, community exchange, emergency, and post-event guidance for overseas visitors in English and Chinese.
Speaker participation guides (en/zh)
content/en/participate/speaker-participation.md, content/zh/participate/speaker-participation.md
Adds speaker participation guidance covering pre-event checks, equipment, slide format, recording, and Q&A tools in both languages.
Sponsor partner guides (en/zh)
content/en/participate/sponsor-partner.md, content/zh/participate/sponsor-partner.md
Adds sponsor booth setup, operational rules, preparation suggestions, and contact information for sponsor partners in both languages.
Welcome party guides (en/zh)
content/en/participate/welcome-party.md, content/zh/participate/welcome-party.md
Adds welcome party event details, ticketing, check-in, and after-party guidance in both languages.

Estimated code review effort: 2 (Simple) | ~20 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title matches the PR’s main theme: adding participation guide content plus styling updates.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f24844a52d

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".

{
key: 'participate',
children: [
{ label: t('menu.participate_index'), path: '/participate' },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Prerender the hidden participate routes

The GitHub Pages workflow runs pnpm build (nuxt generate), and Nuxt's prerenderer only discovers routes from rendered <a> tags or explicit prerender routes. These new content routes are only inside the closed CpDropdown/mobile menu (v-if false during SSR), and no nitro.prerender.routes/prerenderRoutes entries were added, so /participate and the new /participate/* pages are not emitted in .output/public and will 404 on direct visits after deployment.

Useful? React with 👍 / 👎.

Comment thread content/en/participate/index.md Outdated

## Pages

- [First Timer](./first-time.md)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove .md suffixes from internal links

These Markdown links are emitted as normal hrefs by the content renderer, but the catch-all page queries extensionless routes such as /participate/first-time; clicking ./first-time.md from the generated site navigates to a .md URL that no route/content path matches. Please use extensionless URLs (for example /participate/first-time or ./first-time) for this and the other related-page links added in the participate content.

Useful? React with 👍 / 👎.

Comment on lines +53 to +54
- Early bird period: 2025-07-10 21:00 to 2025-08-05 20:00 (UTC+8)
- Pre-purchase period: 2025-07-10 21:00 to 2025-08-07 20:45

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Correct the drink-ticket sale years

This 2026 Welcome Party page lists ticket sale windows in July/August 2025, so users will see the preorder periods as having expired a year before the event even though the party date is 2026/08/07; the Chinese page has the same stale years. Update these to the 2026 sale windows or remove the dates until they are confirmed.

Useful? React with 👍 / 👎.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 17

🧹 Nitpick comments (2)
app/components/content/Danger.vue (1)

1-19: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider extracting a shared Callout base component.

Danger.vue, Tip.vue, and Warning.vue (and Info.vue) share identical structure/markup, differing only in color utility classes and the border color. Consolidating into a single component with a variant/color prop would reduce duplication and ease future maintenance (e.g. adding icons or ARIA roles to all callouts at once).

♻️ Example consolidated component
<script setup lang="ts">
const props = defineProps<{
  title?: string
  variant?: 'info' | 'tip' | 'warning' | 'danger'
}>()

const styles = {
  info: 'text-primary-800 border-primary-400 bg-primary-50',
  tip: 'text-green-900 border-cp-green bg-green-50',
  warning: 'text-yellow-950 border-yellow-500 bg-yellow-50',
  danger: 'text-red-950 border-red-500 bg-red-50',
}

const variantClass = styles[props.variant ?? 'info']
</script>

<template>
  <aside :class="`text-sm my-4 px-4 py-3 border-l-4 rounded ${variantClass}`">
    <p v-if="title" class="font-bold my-0">
      {{ title }}
    </p>
    <div class="[&>:first-child]:mt-0 [&>:last-child]:mb-0">
      <slot />
    </div>
  </aside>
</template>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/components/content/Danger.vue` around lines 1 - 19, Extract the
duplicated callout markup in Danger.vue, Tip.vue, Warning.vue, and Info.vue into
a shared Callout component with a variant prop. Keep the common structure in the
new base component (aside, title, slot wrapper) and move only the color/border
utility classes into a variant-to-class mapping. Update the existing components
to delegate to this shared Callout so the unique symbols like Danger.vue,
Tip.vue, Warning.vue, and Info.vue all reuse the same implementation.
app/assets/css/main.css (1)

1-9: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider using UnoCSS theme tokens instead of hardcoded hex colors.

Elsewhere in this PR (Danger/Tip/Warning/Info components), colors are expressed via UnoCSS theme utility classes (e.g. bg-primary-50, text-red-950). This block instead hardcodes hex values, which could drift from the theme palette over time.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/assets/css/main.css` around lines 1 - 9, The `.prose :where(:not(pre) >
code)` rule uses hardcoded hex colors that should align with the UnoCSS theme
palette. Update the color, border, and background values to use theme tokens or
equivalent UnoCSS utility-driven values consistent with the
Danger/Tip/Warning/Info components, so this block stays synchronized with the
shared design system.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/components/shared/CpNavbar.vue`:
- Around line 227-236: The zh locale block in CpNavbar.vue is missing the
invitation_letter_guide translation used by t('menu.invitation_letter_guide'),
so add the corresponding zh label alongside the other menu keys in the locale
object. Keep it consistent with the existing en locale entry and the surrounding
menu translation symbols so the navbar renders the translated text instead of
the raw key.

In `@content/en/participate/activity.md`:
- Around line 20-24: The Markdown block in the `:::info` section has extra
leading indentation on the bullet item, which is tripping the markdown check.
Update the content in `activity.md` so the list item under the `:::info` block
is aligned without the leading spaces, keeping the `:::info` wrapper and the
link text intact.
- Around line 1-3: Add frontmatter metadata to the Activity content entry so
`app/pages/[...slug].vue` can populate page meta correctly. Update the markdown
file to include `title` and `description` in frontmatter, keeping the existing
H1/body content intact, and make sure the values match the page’s current
subject so the entry is self-describing.

In `@content/en/participate/open-source-community.md`:
- Around line 57-60: Clarify the permitted poster placement in the classroom
entrance decoration guidance to match the later restriction. Update the wording
in the “Classroom Entrance Decoration” section so it explicitly says materials
may be posted only at the classroom entrance or on COSCUP-provided boards, and
avoid implying any generic nearby board is allowed. Keep the phrasing consistent
with the existing “Classroom Entrance Decoration” and “Session schedule”
guidance so readers can easily find the approved location.
- Around line 70-80: The sample agenda date is inconsistent with the surrounding
Sunday references and should be corrected in the open-source community template.
Update the example text in the schedule section so the "TR 515" agenda uses the
same Sunday date as the rest of the document, keeping the "Example title" and
session schedule snippets aligned.

In `@content/en/participate/speaker-participation.md`:
- Around line 26-30: The markdown table in speaker-participation.md needs its
spacing/alignment normalized to match the repository’s expected table
formatting. Reflow the table under the Room and Projector Aspect Ratio headings
so the column separators and cell padding are consistent with the project’s
markdown style, keeping the same content in the same rows.

In `@content/en/participate/sponsor-partner.md`:
- Around line 23-25: The embedded Flickr media in the sponsor-partner page lacks
accessible labels, so update each iframe/embedded media block to include a
concise title or replace it with a linked image plus caption. Apply this to both
embed instances in the section containing the Flickr player iframe, using the
surrounding figure/embed markup to locate and label each one distinctly.

In `@content/en/participate/welcome-party.md`:
- Around line 51-62: Refresh the ticketing copy in the welcome-party content
before publishing: the current ticket block still contains draft values such as
the 2025 sale window, the `TBD` purchase link, and placeholder row labels in the
ticket table. Update the ticketing details in the welcome-party markdown section
so the periods, link, and ticket type names reflect the finalized 2026 event
information, and verify the text around the drink ticket purchase block reads as
publish-ready copy.

In `@content/zh/participate/activity.md`:
- Around line 13-15: Remove the extra blank line immediately before the “##
會場與樓層” heading in the markdown content so it matches the expected formatting.
Update the section in the participate activity document by tightening the
spacing around that heading, and verify there are no stray empty lines left
before the heading text.
- Around line 1-3: The participation page markdown is missing frontmatter
metadata, so `app/pages/[...slug].vue` cannot reliably populate page meta from
the content entry. Add frontmatter at the top of the document with `title` and
`description` for this page, keeping the existing H1 content intact, and ensure
the values match the page’s Chinese participation topic so the metadata is
available consistently.

In `@content/zh/participate/open-source-community.md`:
- Around line 71-80: Update the example date in the open-source community guide
so it matches the surrounding references; the sample title and agenda markup
under the example section currently use TR 515 (08/10 Sunday), but they should
be consistent with the 08/09 Sunday date used elsewhere. Fix the text in the
example block and the related HTML heading in the same section so readers copy
the correct date.
- Around line 58-60: The posting-location guidance in the open-source community
participation doc is inconsistent: the section under the agenda room decoration
guidance allows posting on the classroom door or nearby board, while the later
venue rules restrict postings to the conference-provided board. Update the
related text in the section with the agenda room decoration guidance and the
venue posting rule so they use the same allowed location wording, and reference
the same posting-board terminology consistently throughout the document.

In `@content/zh/participate/oversea.md`:
- Around line 239-260: The emergency helper note uses a different mailbox than
the main emergency-contact instructions, so urgent reports may go to the wrong
inbox. Update the Chinese note in the same section to match the canonical
emergency address already used above, keeping the mailbox consistent across the
emergency guidance. Locate the embedded email reference in the helper note and
replace it so both the main instructions and the note point to the same COSCUP
emergency mailbox.

In `@content/zh/participate/speaker-participation.md`:
- Around line 26-30: The table in the speaker participation markdown needs its
spacing normalized to match the English page’s reflowed Markdown style. Update
the table under the room/projector section in speaker-participation.md so the
column alignment and spacing follow the same formatting pattern used elsewhere,
keeping the content unchanged.

In `@content/zh/participate/sponsor-partner.md`:
- Around line 23-25: The embedded Flickr media in the sponsor-partner content
lacks accessible names, so update each iframe element to include a short
descriptive title or replace the embed with a linked image that has a caption;
apply the same fix to both embedded media instances referenced by the comment
and keep the change within the existing figure/iframe markup.

In `@content/zh/participate/welcome-party.md`:
- Around line 52-63: Refresh the ticketing section in welcome-party.md before
publishing: update the early-bird and pre-order dates for the 2026 guide,
replace the `待補` purchase link with the real URL, and rename the placeholder
table labels in the ticket pricing block. Use the existing ticketing block near
the “酒券可透過...” text and the ticket table to keep the `welcome-party` content
current and complete.
- Around line 71-75: The space-description text in the welcome-party translation
uses mistranslated venue terms, so update the copy in the front-area/back-area
paragraph to match the English source. Replace the incorrect references in the
“感覺有點擠?” section so it refers to the front area and the bistro rather than a
hotel, and keep the rest of the seating/amenities description aligned with the
same intent.

---

Nitpick comments:
In `@app/assets/css/main.css`:
- Around line 1-9: The `.prose :where(:not(pre) > code)` rule uses hardcoded hex
colors that should align with the UnoCSS theme palette. Update the color,
border, and background values to use theme tokens or equivalent UnoCSS
utility-driven values consistent with the Danger/Tip/Warning/Info components, so
this block stays synchronized with the shared design system.

In `@app/components/content/Danger.vue`:
- Around line 1-19: Extract the duplicated callout markup in Danger.vue,
Tip.vue, Warning.vue, and Info.vue into a shared Callout component with a
variant prop. Keep the common structure in the new base component (aside, title,
slot wrapper) and move only the color/border utility classes into a
variant-to-class mapping. Update the existing components to delegate to this
shared Callout so the unique symbols like Danger.vue, Tip.vue, Warning.vue, and
Info.vue all reuse the same implementation.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: a3d8e6c9-ce43-4481-9f82-64ed77495862

📥 Commits

Reviewing files that changed from the base of the PR and between 20ac317 and f24844a.

⛔ Files ignored due to path filters (2)
  • public/participate/welcome-party/space-en.png is excluded by !**/*.png
  • public/participate/welcome-party/space-zh.png is excluded by !**/*.png
📒 Files selected for processing (23)
  • app/assets/css/main.css
  • app/components/content/Danger.vue
  • app/components/content/Info.vue
  • app/components/content/Tip.vue
  • app/components/content/Warning.vue
  • app/components/shared/CpNavbar.vue
  • content/en/participate/activity.md
  • content/en/participate/first-time.md
  • content/en/participate/index.md
  • content/en/participate/open-source-community.md
  • content/en/participate/oversea.md
  • content/en/participate/speaker-participation.md
  • content/en/participate/sponsor-partner.md
  • content/en/participate/welcome-party.md
  • content/zh/participate/activity.md
  • content/zh/participate/first-time.md
  • content/zh/participate/index.md
  • content/zh/participate/open-source-community.md
  • content/zh/participate/oversea.md
  • content/zh/participate/speaker-participation.md
  • content/zh/participate/sponsor-partner.md
  • content/zh/participate/welcome-party.md
  • nuxt.config.ts

Comment on lines +227 to +236
participate_index: "參與指南"
participate_first_time: "第一次參與"
participate_activity: "活動參與"
participate_speaker_participation: "講者參與"
participate_welcome_party: "前夜派對"
participate_oversea: "海外參與者"
participate_open_source_community: "開源社群、攤位及議程軌"
participate_sponsor_partner: "贊助夥伴"
sponsors: "贊助夥伴"
bof: "周邊活動 / BoF"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Missing invitation_letter_guide key in zh locale block.

The en locale block includes invitation_letter_guide: "Invitation Letter Guide", but the zh block lacks this key even though line 32 references t('menu.invitation_letter_guide') for both locales. When the zh locale is active, this will render the raw key string (or fall back with a console warning if a fallback locale is configured) instead of a translated label.

🌐 Proposed fix
     participate_sponsor_partner: "贊助夥伴"
+    invitation_letter_guide: "邀請函申請指南"
     sponsors: "贊助夥伴"
     bof: "周邊活動 / BoF"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
participate_index: "參與指南"
participate_first_time: "第一次參與"
participate_activity: "活動參與"
participate_speaker_participation: "講者參與"
participate_welcome_party: "前夜派對"
participate_oversea: "海外參與者"
participate_open_source_community: "開源社群、攤位及議程軌"
participate_sponsor_partner: "贊助夥伴"
sponsors: "贊助夥伴"
bof: "周邊活動 / BoF"
participate_index: "參與指南"
participate_first_time: "第一次參與"
participate_activity: "活動參與"
participate_speaker_participation: "講者參與"
participate_welcome_party: "前夜派對"
participate_oversea: "海外參與者"
participate_open_source_community: "開源社群、攤位及議程軌"
participate_sponsor_partner: "贊助夥伴"
invitation_letter_guide: "邀請函申請指南"
sponsors: "贊助夥伴"
bof: "周邊活動 / BoF"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/components/shared/CpNavbar.vue` around lines 227 - 236, The zh locale
block in CpNavbar.vue is missing the invitation_letter_guide translation used by
t('menu.invitation_letter_guide'), so add the corresponding zh label alongside
the other menu keys in the locale object. Keep it consistent with the existing
en locale entry and the surrounding menu translation symbols so the navbar
renders the translated text instead of the raw key.

Comment thread content/en/participate/activity.md Outdated
Comment thread content/en/participate/activity.md
Comment on lines +57 to +60
## Classroom Entrance Decoration

We recommend that communities prepare classroom entrance decorations and a daily Session schedule so attendees passing by can quickly understand the room's topic, time slots, and upcoming Sessions. The simplest method is to print paper and post it at the classroom entrance or on a nearby board.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Clarify the allowed poster location.

Line 59 says to post at the classroom entrance or a nearby board, but Line 240 later limits posting to COSCUP-provided boards. Please make this explicit so teams do not attach materials in a prohibited place.

Proposed fix
- The simplest method is to print paper and post it at the classroom entrance or on a nearby board.
+ The simplest method is to print paper and post it on a COSCUP-provided board near the classroom entrance.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Classroom Entrance Decoration
We recommend that communities prepare classroom entrance decorations and a daily Session schedule so attendees passing by can quickly understand the room's topic, time slots, and upcoming Sessions. The simplest method is to print paper and post it at the classroom entrance or on a nearby board.
## Classroom Entrance Decoration
We recommend that communities prepare classroom entrance decorations and a daily Session schedule so attendees passing by can quickly understand the room's topic, time slots, and upcoming Sessions. The simplest method is to print paper and post it on a COSCUP-provided board near the classroom entrance.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@content/en/participate/open-source-community.md` around lines 57 - 60,
Clarify the permitted poster placement in the classroom entrance decoration
guidance to match the later restriction. Update the wording in the “Classroom
Entrance Decoration” section so it explicitly says materials may be posted only
at the classroom entrance or on COSCUP-provided boards, and avoid implying any
generic nearby board is allowed. Keep the phrasing consistent with the existing
“Classroom Entrance Decoration” and “Session schedule” guidance so readers can
easily find the approved location.

Comment on lines +70 to +80
Example title:

```text
TR 515 (08/10 Sunday) - Agenda
XXX Open Source Session Track
```

Example Session schedule:

<p style="font-size: 1.5em; font-weight: 700; margin-bottom: 0; text-align: center;">TR 515 (08/10 Sunday) - Agenda</p>
<p style="font-size: 0.95em; margin-top: 4px; text-align: center;">XXX Open Source Session Track</p>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Fix the sample Sunday date.

The example uses 08/10 Sunday, which does not match the surrounding 08/09 Sunday references. Please update the template so it reflects the actual event day.

Proposed fix
-TR 515 (08/10 Sunday) - Agenda
+TR 515 (08/09 Sunday) - Agenda
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@content/en/participate/open-source-community.md` around lines 70 - 80, The
sample agenda date is inconsistent with the surrounding Sunday references and
should be corrected in the open-source community template. Update the example
text in the schedule section so the "TR 515" agenda uses the same Sunday date as
the rest of the document, keeping the "Example title" and session schedule
snippets aligned.

Comment on lines +239 to +260
For emergency assistance from the COSCUP exchange team, send an email to `coscupengt+2701012 [at] gmail.com`. You do not need to write a polished message. Please send the information quickly:

- Subject: `Emergency Contact - [Your Name]`
- Who you are: the name you use at COSCUP.
- When it happened.
- Where it happened.
- What happened.
- How we can contact you.
- If possible, what kind of help you need right now.

In most situations, you can ask people nearby for help in English or by using a translation app. If you do not have internet or phone access, you can prepare the Chinese note below and show it to someone nearby. The note asks them to help you communicate, send an email to COSCUP, and possibly bring you to a nearby convenience store or police station.

If someone brings you to a convenience store after reading the note, please stay there and wait. COSCUP will try to contact the convenience store after receiving the email.

:::info{title="給協助者看的中文紙條"}

當您看到這個紙條表示你面前的這位朋友遇到麻煩需要協助,您是否可以開啟翻譯軟體簡單溝通問題。

如果遇到的麻煩無法立刻解決,您是否可以協助寄送 Email 到:

```text
coscupengt+105105@gmail.com

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Use one canonical emergency mailbox here.

This helper note points to a different address than the main emergency-contact section above. That split can send urgent reports to the wrong inbox. Please align this with the same mailbox used in the earlier emergency instructions.

🔧 Proposed fix
- coscupengt+105105@gmail.com
+ coscupengt+2701012@gmail.com
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
For emergency assistance from the COSCUP exchange team, send an email to `coscupengt+2701012 [at] gmail.com`. You do not need to write a polished message. Please send the information quickly:
- Subject: `Emergency Contact - [Your Name]`
- Who you are: the name you use at COSCUP.
- When it happened.
- Where it happened.
- What happened.
- How we can contact you.
- If possible, what kind of help you need right now.
In most situations, you can ask people nearby for help in English or by using a translation app. If you do not have internet or phone access, you can prepare the Chinese note below and show it to someone nearby. The note asks them to help you communicate, send an email to COSCUP, and possibly bring you to a nearby convenience store or police station.
If someone brings you to a convenience store after reading the note, please stay there and wait. COSCUP will try to contact the convenience store after receiving the email.
:::info{title="給協助者看的中文紙條"}
當您看到這個紙條表示你面前的這位朋友遇到麻煩需要協助,您是否可以開啟翻譯軟體簡單溝通問題。
如果遇到的麻煩無法立刻解決,您是否可以協助寄送 Email 到:
```text
coscupengt+105105@gmail.com
For emergency assistance from the COSCUP exchange team, send an email to `coscupengt+2701012 [at] gmail.com`. You do not need to write a polished message. Please send the information quickly:
- Subject: `Emergency Contact - [Your Name]`
- Who you are: the name you use at COSCUP.
- When it happened.
- Where it happened.
- What happened.
- How we can contact you.
- If possible, what kind of help you need right now.
In most situations, you can ask people nearby for help in English or by using a translation app. If you do not have internet or phone access, you can prepare the Chinese note below and show it to someone nearby. The note asks them to help you communicate, send an email to COSCUP, and possibly bring you to a nearby convenience store or police station.
If someone brings you to a convenience store after reading the note, please stay there and wait. COSCUP will try to contact the convenience store after receiving the email.
:::info{title="給協助者看的中文紙條"}
當您看到這個紙條表示你面前的這位朋友遇到麻煩需要協助,您是否可以開啟翻譯軟體簡單溝通問題。
如果遇到的麻煩無法立刻解決,您是否可以協助寄送 Email 到:
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@content/zh/participate/oversea.md` around lines 239 - 260, The emergency
helper note uses a different mailbox than the main emergency-contact
instructions, so urgent reports may go to the wrong inbox. Update the Chinese
note in the same section to match the canonical emergency address already used
above, keeping the mailbox consistent across the emergency guidance. Locate the
embedded email reference in the helper note and replace it so both the main
instructions and the note point to the same COSCUP emergency mailbox.

Comment thread content/zh/participate/speaker-participation.md Outdated
Comment thread content/zh/participate/sponsor-partner.md
Comment on lines +52 to +63
酒券可透過事前購買、邀請票或現場購買取得。

- 早鳥票時間:2025-07-10 21:00 至 2025-08-05 20:00 (UTC+8)
- 事前購買時間:2025-07-10 21:00 至 2025-08-07 20:45
- 可現場購票。
- 購買酒券連結:待補

| 酒券類型 | 價格 |
| --- | --- |
| 早鳥預購前夜派對酒券<br>Early bird pre-order Pre-Party Drink Ticket (Location) | NTD$350 |
| 現場購買前夜派對酒券<br>On-site Purchase of Pre-party Drink Ticket | NTD$400 |

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Refresh the ticketing block before publishing.

This still uses 2025 dates, leaves the purchase link as 待補, and keeps placeholder row labels. For a 2026 guide, that will send readers to stale or incomplete purchase info.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@content/zh/participate/welcome-party.md` around lines 52 - 63, Refresh the
ticketing section in welcome-party.md before publishing: update the early-bird
and pre-order dates for the 2026 guide, replace the `待補` purchase link with the
real URL, and rename the placeholder table labels in the ticket pricing block.
Use the existing ticketing block near the “酒券可透過...” text and the ticket table
to keep the `welcome-party` content current and complete.

Comment thread content/zh/participate/welcome-party.md Outdated
Comment on lines +71 to +75
## 感覺有點擠?

我們不只有表面區域,歡迎您至酒店後面聊天。穿過酒店大堂到後面的室外區域,也備有水冷扇、飲料、桌椅。

![前夜派對空間示意圖](/2026/participate/welcome-party/space-zh.png)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Fix the space-description translation.

表面區域 / 酒店 are mistranslations here; the English copy is referring to the front area and the bistro, not a hotel. As written, this sentence will confuse readers looking for the back-area seating.

Suggested fix
-我們不只有表面區域,歡迎您至酒店後面聊天。穿過酒店大堂到後面的室外區域,也備有水冷扇、飲料、桌椅。
+我們不只有前方區域,歡迎您到餐酒館後方聊天。穿過大廳到後面的室外區域,也備有水冷扇、飲料、桌椅。
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## 感覺有點擠?
我們不只有表面區域,歡迎您至酒店後面聊天。穿過酒店大堂到後面的室外區域,也備有水冷扇、飲料、桌椅。
![前夜派對空間示意圖](/2026/participate/welcome-party/space-zh.png)
## 感覺有點擠?
我們不只有前方區域,歡迎您到餐酒館後方聊天。穿過大廳到後面的室外區域,也備有水冷扇、飲料、桌椅。
![前夜派對空間示意圖](/2026/participate/welcome-party/space-zh.png)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@content/zh/participate/welcome-party.md` around lines 71 - 75, The
space-description text in the welcome-party translation uses mistranslated venue
terms, so update the copy in the front-area/back-area paragraph to match the
English source. Replace the incorrect references in the “感覺有點擠?” section so it
refers to the front area and the bistro rather than a hotel, and keep the rest
of the seating/amenities description aligned with the same intent.

- CpDropdown: render menu with v-show so the generate crawler discovers
  the participate routes (they were behind v-if and never prerendered,
  causing 404s on direct visits)
- Strip .md suffixes from internal content links and make them
  locale-aware absolute paths (/participate/* and /en/participate/*)
- welcome-party: use :NuxtPicture with a baseURL-relative src so the
  space map image resolves through IPX instead of 404ing
- Add title/description frontmatter to all participate pages, matching
  the existing content convention
- sponsor-partner: add title attributes to Flickr iframes for a11y
- Fix markdown formatting flagged by the linter (table spacing, stray
  blank lines, list indentation)

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
app/components/shared/CpDropdown.vue (1)

22-37: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider adding aria-expanded/aria-haspopup to the toggle button.

Now that the menu stays mounted and toggles via v-show, it's a good opportunity to expose the open state to assistive tech, since the DOM structure permanently reflects a disclosure widget pattern.

♻️ Optional accessibility improvement
     <button
       class="flex gap-1 whitespace-nowrap items-center"
       type="button"
+      :aria-expanded="open"
+      aria-haspopup="true"
       `@click`="toggle()"
     >
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/components/shared/CpDropdown.vue` around lines 22 - 37, Add accessibility
state to the dropdown toggle in CpDropdown.vue by updating the button that calls
toggle() to expose the disclosure state for assistive tech. Use the existing
open state to bind aria-expanded, and add aria-haspopup to indicate the menu
behavior, keeping the change localized to the button/ul pair that controls the
v-show menu.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@content/en/participate/activity.md`:
- Line 8: Update the wording in the participant overview text on the activity
page to use the hyphenated lower-case form “in-person” instead of “In-Person”;
adjust the sentence in the main page copy so the phrasing reads naturally while
keeping the rest of the content unchanged.

In `@content/en/participate/first-time.md`:
- Line 19: Update the copy in the first-time participation markdown so the
sentence uses “in-person” instead of “In-Person” in the OPass App description;
keep the rest of the wording unchanged and adjust the phrasing in that line to
match the lower-case hyphenated style.

---

Nitpick comments:
In `@app/components/shared/CpDropdown.vue`:
- Around line 22-37: Add accessibility state to the dropdown toggle in
CpDropdown.vue by updating the button that calls toggle() to expose the
disclosure state for assistive tech. Use the existing open state to bind
aria-expanded, and add aria-haspopup to indicate the menu behavior, keeping the
change localized to the button/ul pair that controls the v-show menu.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: ad816af1-2db2-4530-b117-c40bde48ddc7

📥 Commits

Reviewing files that changed from the base of the PR and between f24844a and 4008f48.

📒 Files selected for processing (17)
  • app/components/shared/CpDropdown.vue
  • content/en/participate/activity.md
  • content/en/participate/first-time.md
  • content/en/participate/index.md
  • content/en/participate/open-source-community.md
  • content/en/participate/oversea.md
  • content/en/participate/speaker-participation.md
  • content/en/participate/sponsor-partner.md
  • content/en/participate/welcome-party.md
  • content/zh/participate/activity.md
  • content/zh/participate/first-time.md
  • content/zh/participate/index.md
  • content/zh/participate/open-source-community.md
  • content/zh/participate/oversea.md
  • content/zh/participate/speaker-participation.md
  • content/zh/participate/sponsor-partner.md
  • content/zh/participate/welcome-party.md
✅ Files skipped from review due to trivial changes (6)
  • content/zh/participate/first-time.md
  • content/zh/participate/index.md
  • content/zh/participate/speaker-participation.md
  • content/zh/participate/open-source-community.md
  • content/zh/participate/activity.md
  • content/en/participate/oversea.md
🚧 Files skipped from review as they are similar to previous changes (6)
  • content/en/participate/speaker-participation.md
  • content/en/participate/welcome-party.md
  • content/zh/participate/welcome-party.md
  • content/zh/participate/sponsor-partner.md
  • content/zh/participate/oversea.md
  • content/en/participate/open-source-community.md


# Activity

This page summarizes information from a participant's point of view, including attendees, speakers, general community partners, overseas communities, temporary activity organizers, and anyone who wants to meet more open source communities In-Person. If this is your first time participating, we recommend reading [First Timer](/en/participate/first-time) first, then returning to this page to plan transportation, Sessions, meals, and onsite activities.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use in-person here.

The capitalization reads awkwardly in this sentence; lower-case/hyphenated phrasing is clearer.

🧰 Tools
🪛 LanguageTool

[grammar] ~8-~8: Use a hyphen to join words.
Context: ..., and anyone who wants to meet more open source communities In-Person. If this is...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@content/en/participate/activity.md` at line 8, Update the wording in the
participant overview text on the activity page to use the hyphenated lower-case
form “in-person” instead of “In-Person”; adjust the sentence in the main page
copy so the phrasing reads naturally while keeping the rest of the content
unchanged.

Source: Linters/SAST tools

Before the event, we recommend that you:

1. Browse the official schedule and bookmark a few Sessions you definitely want to attend.
2. Install or check the [OPass App](https://opass.app) so you can view Sessions, bookmark activities, and join In-Person interactions.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use in-person here.

In-Person reads awkwardly in this sentence; lower-case/hyphenated phrasing is cleaner.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@content/en/participate/first-time.md` at line 19, Update the copy in the
first-time participation markdown so the sentence uses “in-person” instead of
“In-Person” in the OPass App description; keep the rest of the wording unchanged
and adjust the phrasing in that line to match the lower-case hyphenated style.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4008f483a4

ℹ️ About Codex in GitHub

Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".


- Your passport should be valid for at least 6 months.
- VISA: whether you need a visa, eVisa, or visa-free entry.
- Invitation Letter: whether you need an invitation letter from COSCUP. For visa and invitation letter application instructions, refer to: [Invitation Letter Application Guide for Visa](https://coscup.org/2026/participate/invitation-letter-guide).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Point English content at English routes

The English guide is hard-coding default-locale URLs for resources that have English versions: this invitation-guide link omits /en, and the same pattern appears on the Transportation and CoC links elsewhere in the English participation content. Because the site default locale is zh and invitation-letter-guide.vue renders the HackMD section from locale.value, overseas readers who click these links from English pages land on Chinese instructions; use the English-prefixed route (and cococo-en for CoC) from English content.

Useful? React with 👍 / 👎.


:::info{title="Conference Information"}

- Please refer to the venue map information page: [https://coscup.org/2026/venue](https://coscup.org/2026/venue)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid linking to a missing venue page

This new link points attendees to /2026/venue, but this repo has no content/*/venue.md or app/pages/venue.vue route (I searched for venue; only these new content references and the map component appear). Since the catch-all page throws a 404 when no content is found, users clicking the venue-map link from either locale will hit a missing page unless the route is added or the link is changed to an existing page.

Useful? React with 👍 / 👎.

Example title:

```text
TR 515 (08/10 Sunday) - Agenda

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Correct the copied agenda example date

The example immediately above tells communities to use the actual 2026 conference dates, 08/08 Saturday or 08/09 Sunday, but this copyable template switches to 08/10 Sunday; in 2026, August 10 is Monday and after COSCUP ends. Communities copying this room-signage example would publish the wrong day/date, and the Chinese page repeats the same template.

Useful? React with 👍 / 👎.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants