> ## Documentation Index
> Fetch the complete documentation index at: https://help.helloazhenweb.top/llms.txt
> Use this file to discover all available pages before exploring further.

# Birthday Wall docs — setup, features, and self-hosting

> Find guides for setting up, customizing, and self-hosting Birthday Wall — a personalized birthday countdown, wish wall, music radio, and games app.

<div className="mx-auto flex w-full max-w-5xl flex-col gap-14 px-4 py-12 lg:py-16">
  <div className="flex flex-col items-center gap-12">
    <div className="flex w-full max-w-lg flex-col gap-1">
      <h1 className="text-center text-4xl font-semibold tracking-tight text-gray-900 dark:text-gray-50">
        Birthday Wall docs
      </h1>

      <p className="text-center text-balance text-base text-gray-600 dark:text-gray-400 mt-2">
        Everything you need to set up, customize, and share a personalized birthday experience — countdown, wish wall, music radio, and more.
      </p>
    </div>

    <div className="flex w-full max-w-lg flex-col gap-4">
      <div className="flex w-full flex-col gap-2.5 sm:flex-row sm:items-stretch">
        <div className="kb-search-entry min-w-0 w-full flex-1">
          <button type="button" data-search-trigger className="pointer-events-auto flex h-11 w-full cursor-pointer items-center justify-between gap-2 truncate rounded-full bg-gray-50 pl-4 pr-3 text-left text-sm font-normal leading-6 text-gray-500 shadow-none hover:text-gray-500 ring-1 ring-gray-100 hover:ring-gray-200 dark:bg-white/[0.04] dark:text-white/50 dark:hover:text-white/50 dark:ring-1 dark:ring-white/[0.08] dark:hover:ring-white/15">
            <div className="flex min-w-0 flex-1 items-center gap-2">
              <Icon icon="search" size={14} className="shrink-0 text-gray-700 dark:text-gray-400" />

              <div className="min-w-0 truncate font-normal text-gray-500 hover:text-gray-500 dark:text-white/50 dark:hover:text-white/50">
                Search the docs
              </div>
            </div>

            <span className="flex-none text-xs font-semibold text-gray-500 hover:text-gray-500 dark:text-white/50 dark:hover:text-white/50">
              ⌘K
            </span>
          </button>
        </div>

        <button type="button" id="custom-homepage-assistant-entry" data-assistant-trigger aria-label="Ask AI" className="group/ai flex pointer-events-auto h-11 w-full shrink-0 cursor-pointer flex-row items-center justify-center gap-1.5 rounded-full bg-gray-50 px-4 text-sm font-normal leading-6 text-gray-500 shadow-none ring-1 ring-gray-100 hover:text-gray-600 hover:ring-gray-200 dark:bg-white/[0.04] dark:text-white/50 dark:ring-1 dark:ring-white/[0.08] dark:hover:text-white/70 dark:hover:ring-white/15 sm:w-auto">
          <Icon icon="sparkles" size={16} className="shrink-0 text-gray-700 group-hover/ai:text-gray-800 dark:text-gray-400 dark:group-hover/ai:text-gray-200" />

          <span className="whitespace-nowrap text-gray-500 dark:text-white/50">Ask AI</span>
        </button>
      </div>

      <div className="flex flex-wrap items-center justify-center gap-3 text-sm text-gray-500 dark:text-gray-400">
        <span>Popular searches</span>

        <div className="flex flex-wrap justify-center gap-1">
          {['countdown', 'wish wall', 'self-hosting'].map((term) => (
                              <button
                                key={term}
                                type="button"
                                data-popular-search
                                data-term={term}
                                className="rounded-md bg-gray-100 px-1.5 py-1 font-mono text-xs font-bold uppercase tracking-tight text-gray-600 transition hover:bg-gray-200 dark:bg-white/10 dark:text-gray-300 dark:hover:bg-white/15"
                              >
                                {term.toUpperCase()}
                              </button>
                            ))}
        </div>
      </div>
    </div>
  </div>

  <div className="flex flex-col gap-4">
    <h3 className="text-base font-medium text-gray-900 dark:text-gray-50">Featured guides</h3>

    <Columns cols={3}>
      <Card horizontal icon="rocket" iconType="light" title="Get started" href="/introduction">
        Introduction, quickstart, and first-time setup
      </Card>

      <Card horizontal icon="star" iconType="light" title="Features" href="/features/countdown">
        Countdown, wish wall, radio, report, and games
      </Card>

      <Card horizontal icon="sliders" iconType="light" title="Customization" href="/customization/birthday-config">
        Configure the celebrant, music, and site identity
      </Card>
    </Columns>
  </div>

  ***

  <div className="flex flex-col gap-4">
    <h3 className="text-base font-medium text-gray-900 dark:text-gray-50">All guides</h3>

    <Columns cols={3}>
      <Card title="Birthday countdown" icon="timer" iconType="light" href="/features/countdown" cta="Read article">
        Live days, hours, minutes, seconds until the big day
      </Card>

      <Card title="Wish wall" icon="heart" iconType="light" href="/features/wish-wall" cta="Read article">
        Anonymous birthday messages from friends and family
      </Card>

      <Card title="Music radio" icon="music" iconType="light" href="/features/radio" cta="Read article">
        Curated playlists and song detail view
      </Card>

      <Card title="Customize birthday" icon="calendar-heart" iconType="light" href="/customization/birthday-config" cta="Read article">
        Set the celebrant name, date, and greeting message
      </Card>

      <Card title="Self-hosting" icon="server" iconType="light" href="/self-hosting/overview" cta="Read article">
        Deploy on Vercel with Supabase in minutes
      </Card>

      <Card title="FAQ" icon="circle-help" iconType="light" href="/reference/faq" cta="Read article">
        Common questions and troubleshooting tips
      </Card>
    </Columns>
  </div>

  ***

  <div className="flex flex-col gap-2">
    <h3 className="text-base font-medium text-gray-900 dark:text-gray-50">Suggested articles</h3>

    <p className="text-base text-gray-600 dark:text-gray-400">
      Popular starting points from the Birthday Wall docs
    </p>
  </div>

  <Columns cols={2} className="suggested-articles">
    <Card title="Quickstart: deploy in under 10 minutes" icon="timer" iconType="light" href="/quickstart" cta="Read article">
      Fork, configure, connect Supabase, and deploy to Vercel in a few steps.
    </Card>

    <Card title="Configure the wish wall" icon="pencil-line" iconType="light" href="/features/wish-wall" cta="Read article">
      How visitors submit anonymous wishes and how to view them in the admin panel.
    </Card>

    <Card title="Add songs to the radio" icon="list-music" iconType="light" href="/customization/music-config" cta="Read article">
      Edit the music config to add playlists, songs, lyrics, and artwork.
    </Card>

    <Card title="Environment variables" icon="key" iconType="light" href="/self-hosting/environment" cta="Read article">
      All required and optional environment variables for self-hosting Birthday Wall.
    </Card>
  </Columns>
</div>
