Social Sharing & Hashtag Generator

Overview

The Social Sharing Kit helps event hosts generate platform-ready marketing copy—hashtags, captions, story text, email subject lines, and SEO meta—for Instagram, X (Twitter), LinkedIn, Facebook, and WhatsApp. Content is built from your event details and always includes Nigall brand tags #Nigall and #NigallEvents, plus the handle @nigall_events.

When an OpenAI API key is configured on the server, Nigall uses AI to produce tailored copy. Otherwise, a built-in template engine generates professional fallback assets so the feature works in every environment.

Purpose

Reduce time spent writing promotional posts across channels, keep brand voice consistent, and give organizers copy-paste assets for launch announcements, reminders, day-of posts, and attendee share prompts.

Who should use it

Role Use case
Event host / organizer Generate and copy captions before marketing push
Marketing / comms Hashtag sets, email subject lines, OG descriptions
Attendees Use Attendee share captions (copy from kit or share manually)

Benefits

  • One-click generation from live event data (title, date, venue, price, description)
  • Tabbed output by platform with Copy buttons
  • Optional custom event hashtag included in primary tags
  • Cached results saved on the event—no re-generation unless you choose Regenerate
  • Brand-compliant defaults even without AI

Action Path
Social Sharing Kit (host) /events/<pk>/<event_tag>/Social sharing kit panel
Generate / regenerate (API) POST /events/<pk>/<event_tag>/social-sharing/generate/
Public event page (share URL in copy) /events/<pk>/<event_tag>/
Discover listing (public events) /events/discover/

Tip: Open View Event from the edit page. The Social sharing kit appears in the left column when signed in as the event host.


Prerequisites

  • Event must exist with title, dates, location, and description filled in
  • User must be the event host (Event.host)
  • No paid module or subscription required—available on all events
  • Optional: Server OPENAI_API_KEY for AI-generated copy (see Administrator notes)

Step-by-step instructions

Beginner — Generate your first sharing kit

  1. Sign in as event host.
  2. Open your event → View Event (/events/<pk>/<tag>/).
  3. Scroll to Social sharing kit (below Survey questions).
  4. Optionally enter a Custom event hashtag (e.g., #SummerFest2026). Use camelCase; no spaces.
  5. Click Generate.
  6. Browse tabs: Hashtags, Instagram, X / Twitter, LinkedIn, Facebook, WhatsApp, Stories, Email & SEO.
  7. Click Copy on any block and paste into your social tool or scheduler.

[SCREENSHOT: Social sharing kit panel with Hashtags tab open]

Intermediate — Regenerate after event updates

  1. Update event title, date, venue, description, or ticket price on Edit Event.
  2. Return to event detail → Social sharing kit.
  3. Adjust custom hashtag if needed.
  4. Click Regenerate to refresh all assets (previous cache is replaced).

Note: Cached assets are stored on the event. If you only change minor copy in the description, regenerate so captions stay accurate.

Advanced — Use outputs in a campaign workflow

Timing Suggested asset
Launch Instagram Organizer announcement, LinkedIn Organizer announcement, X Thread opener
7 days out Instagram Organizer reminder, X Organizer reminder, story Countdown 7 days
3 days / 1 day Story Countdown 3 days / Countdown 1 day
Day of Instagram Organizer day of, story Day of
Attendee advocacy Instagram / X Attendee share captions
Email blast Pick from Email subject lines; body from Email Communications
Low capacity Story Few spots left
Sold out Story Sold out

Append the platform Follow CTA where relevant (e.g., “Follow @nigall_events for more events near you!” on Instagram).


Field descriptions

Field Location Description
Custom event hashtag Social sharing kit panel Optional organizer tag (max 80 chars). Normalized to camelCase on save. Example: #BrooklynTech2026
Generate / Regenerate Panel header button Builds or refreshes all assets
Primary hashtags Hashtags tab 3–5 event-specific tags; always includes #Nigall and #NigallEvents
Secondary hashtags Hashtags tab Broader discovery tags (location, topic)
Full tag string Hashtags tab All tags in one copyable line
Platform captions Per-tab content Organizer and attendee variants per network
Story text Stories tab Short overlays (≤8 words) for countdown and urgency
Email subject lines Email & SEO tab Five promotional subject options
SEO meta Email & SEO tab meta_title, meta_description, og_title, og_description

Data sources (automatic)

Placeholder Pulled from
Event name Event.title
Event type Event.event_category or registration type
Date & time Event.start_date / end_date (local timezone)
Venue Linked Venue.name or first segment of Event.location
City Parsed from Event.location
Organizer name Host full name or email
Description Plain text from Event.description (HTML stripped)
Ticket price Free, RSVP, or “From $X” from ticket tiers
Event URL Absolute link to event detail page

Business rules

Rule Behavior
Host-only Only Event.host can generate assets
Cache Results saved in Event.social_sharing_assets JSON
Regenerate force_refresh=1 replaces cache
Custom hashtag Saved on generate if changed in panel
Brand tags #Nigall and #NigallEvents always in primary list
Brand handle @nigall_events referenced in follow CTAs and many captions
X/Twitter length Captions truncated or validated to ≤280 characters
AI vs fallback OpenAI when key present; template fallback on error or missing key
Language AI follows event description language when key configured

Validation rules

Input Rule
Custom hashtag Max 80 characters; normalized to #CamelCase
Generate POST CSRF + login required
Non-host POST HTTP 403 JSON error

User permissions

Action Host Guest Staff
View kit panel ❌ (unless host)
Generate / regenerate ❌ (unless host)
Share you're going panel ✅ if RSVP/registration confirmed and host generated kit
Copy public event URL

Workflow

flowchart TD A[Host opens event detail] --> B[Enter optional custom hashtag] B --> C[Click Generate] C --> D{OPENAI_API_KEY set?} D -->|Yes| E[AI prompt with event context] D -->|No| F[Template fallback] E --> G[Ensure brand hashtags and handle] F --> G G --> H[Save to social_sharing_assets] H --> I[Display tabbed copy blocks] I --> J[Host copies to social channels]

Examples

Tech meetup: Custom hashtag #AustinDevNight2026. Use X announcement tweet + LinkedIn post for launch; Instagram reminder 7 days before; attendee share caption for community reposts.

Wedding RSVP: Custom hashtag #SmithJonesWedding. WhatsApp Personal invite for family groups; Instagram attendee share for guests posting “I’m going!”

Paid conference: Regenerate after early-bird pricing ends so Ticket price in captions reflects current tiers.


Best practices

  • Complete About the Event, location, and cover image before generating
  • Set Discover visibility and category before public launch (Discover & Visibility)
  • Add survey questions first if copy should reference guest data collection (Survey & Custom Questions)
  • Regenerate after any date, venue, or pricing change
  • Pair kit output with Email Blasts for owned-audience sends
  • Use Full tag string for Instagram (hashtags at end of caption per platform norms)

Tips

  • Status line shows AI vs template source after generation
  • LinkedIn posts: keep to ≤5 hashtags for professional tone
  • Story overlays are short by design—pair with event cover art in your design tool
  • SEO fields are suggestions; paste into meta tags if you customize landing pages externally

Common mistakes

Mistake Result Fix
Generating before event details finalized Outdated URLs/dates in copy Regenerate after edits
Hashtag with spaces Normalization may strip words Use #CamelCase only
Expecting auto-post to social Nigall does not publish for you Copy/paste or use external scheduler
Assuming AI without server key Template copy only Configure OPENAI_API_KEY (admin)

FAQs

Does Nigall post to Instagram or X for me?
No. The kit generates copy; you publish through each platform or your scheduling tool.

Is AI required?
No. Template fallback produces complete assets without an API key.

Can attendees see the kit?
Hosts see the full Social sharing kit. Guests who RSVP Will Attend / Tentative (or have a confirmed registration) see a Share that you're going panel with attendee captions and hashtags—only after the host has generated the kit once.

Do RSVP and Registration events both support this?
Yes. Ticket price line adapts (Free, RSVP, or priced tiers).

Where are brand hashtags defined?
Always #Nigall and #NigallEvents; handle @nigall_events.


Troubleshooting

Symptom Cause Fix
Panel not visible Not signed in as host Sign in as Event.host
“Generation failed” OpenAI error or timeout Retry; check server logs; fallback runs automatically on most errors
Stale dates in copy Cache from prior generate Click Regenerate
Empty description in copy Event description blank Fill About the Event on edit page
403 on generate Wrong user Host account only


Screenshot placeholders

  1. [SCREENSHOT: Social sharing kit — custom hashtag + Generate button]
  2. [SCREENSHOT: Hashtags tab — primary, secondary, full tag string]
  3. [SCREENSHOT: Instagram tab — organizer announcement with Copy button]
  4. [SCREENSHOT: Email & SEO tab — subject lines and meta fields]

Administrator notes

Environment variables (optional AI):

Variable Purpose Default
OPENAI_API_KEY Enables AI generation Empty → template fallback
OPENAI_MODEL Chat model gpt-4o-mini

Prompt template path: events/prompts/social_sharing.txt

Generated JSON stored in Event.social_sharing_assets. No PII beyond event/host display name is sent to OpenAI.


Developer / API notes

Endpoint: POST /events/<pk>/<event_tag>/social-sharing/generate/

Body (form-urlencoded):

Parameter Description
custom_hashtag Optional; persisted on event
force_refresh 1 to bypass cache

Response (JSON):

{
  "ok": true,
  "assets": {
    "hashtags": { "primary": [], "secondary": [], "full_tag_string": "" },
    "captions": { "instagram": {}, "x_twitter": {}, "linkedin": {}, "facebook": {}, "whatsapp": {} },
    "story_text": {},
    "email_subject_lines": [],
    "seo_meta": {},
    "follow_cta": {},
    "brand_compliance_check": {},
    "_source": "openai | fallback",
    "generated_at": "ISO-8601 timestamp"
  }
}

Service module: events.social_sharing_services.generate_social_sharing_assets()