diff --git a/app/community/page.tsx b/app/community/page.tsx new file mode 100644 index 000000000..10fba0a41 --- /dev/null +++ b/app/community/page.tsx @@ -0,0 +1,388 @@ +import type { Metadata } from 'next'; +import Link from 'next/link'; +import { + ArrowRight, + BookOpen, + Bug, + CheckCircle2, + GitPullRequest, + Heart, + MessageSquare, + PenLine, + Scale, + Sparkles, + Trophy, + UserPlus, + Wrench, +} from 'lucide-react'; +import { PageHero } from '@/components/page-hero'; +import { SectionHeader } from '@/components/section-header'; +import { SectionSeparator } from '@/components/section-separator'; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card'; +import { Badge } from '@/components/ui/badge'; +import { Button } from '@/components/ui/button'; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from '@/components/ui/accordion'; +import { Github, Twitter, Linkedin } from '@/components/icons/social-icons'; + +// Single source of truth for the prize, so the whole page updates from one edit. +const PRIZE_EACH = '$10'; +const WEEKLY_WINNERS = 5; +const PRIZE_SUMMARY = `${PRIZE_EACH} each for ${WEEKLY_WINNERS} winners`; +const REPO_URL = 'https://github.com/The-DevOps-Daily/devops-daily'; +const SUBMIT_URL = `${REPO_URL}/tree/main/content/community`; +const DISCORD_URL = 'https://discord.gg/devopsdaily'; +const X_URL = 'https://x.com/thedevopsdaily'; +const LINKEDIN_URL = 'https://www.linkedin.com/company/thedevopsdaily'; + +export const metadata: Metadata = { + title: 'Community Writing Challenge', + description: + 'Write for DevOps Daily. Publish a technical article to thousands of engineers by opening a pull request, and the most popular community posts each week win a cash prize.', + alternates: { canonical: '/community' }, + openGraph: { + title: 'Community Writing Challenge - DevOps Daily', + description: + 'Open a pull request, get your article published, and win the weekly prize for the most popular community post.', + type: 'website', + url: '/community', + images: [ + { + url: '/images/pages/community.png', + width: 1200, + height: 630, + alt: 'DevOps Daily Community Writing Challenge', + }, + ], + }, + twitter: { + card: 'summary_large_image', + title: 'Community Writing Challenge - DevOps Daily', + description: + 'Open a pull request, get your article published, and win the weekly prize for the most popular community post.', + images: ['/images/pages/community.png'], + }, +}; + +const steps = [ + { + icon: PenLine, + title: '1. Write what you know', + description: + 'A war story, a deep dive, a tool comparison, a postmortem. If you shipped it or debugged it at 3am, it makes a good post.', + }, + { + icon: GitPullRequest, + title: '2. Open a pull request', + description: + 'Add your article as a Markdown file to our open GitHub repo and open a PR. The same workflow you already use every day. Writing with Claude Code? The repo ships a /write-post skill that scaffolds a draft in our format for you.', + }, + { + icon: CheckCircle2, + title: '3. We review and merge', + description: + 'A maintainer checks it for accuracy and clarity, suggests edits if needed, and publishes it under Community with your byline.', + }, + { + icon: Trophy, + title: '4. Win the week', + description: `Each week the ${WEEKLY_WINNERS} most popular community posts each win ${PRIZE_EACH}. Five winners, every week.`, + }, +]; + +const topics = [ + { + icon: Bug, + title: 'War stories and postmortems', + description: 'The outage that taught you something. What broke, how you found it, what you changed.', + }, + { + icon: BookOpen, + title: 'Deep dives', + description: 'How a protocol, a tool, or a piece of infrastructure actually works under the hood.', + }, + { + icon: Wrench, + title: 'Hands-on tutorials', + description: 'A real setup someone can follow end to end, with the gotchas you hit along the way.', + }, + { + icon: Scale, + title: 'Honest comparisons', + description: 'Two tools, measured against real use. What you picked, what you would not pick again.', + }, +]; + +const rules = [ + 'Your work must be original and your own. No reposts, no AI-generated filler. If you used an AI assistant, disclose it.', + 'You keep ownership of what you write. Publishing here grants us the right to host it; your byline stays on it and links back to you.', + 'A maintainer reviews every submission. Merge decisions are based on accuracy, clarity, and fit.', + `${WEEKLY_WINNERS} prizes per week, ${PRIZE_EACH} each, to the week's most popular community posts.`, + 'Be accurate and be kind. Cite sources, do not punch down, and do not post anything you do not have the right to share.', +]; + +const faqs = [ + { + q: 'Do I need to be an expert?', + a: 'No. Some of the best posts come from someone explaining the thing they just learned. If it is true, useful, and your own experience, it belongs here.', + }, + { + q: 'What if my pull request is not merged?', + a: 'You will get review feedback explaining why, usually with concrete edits. Most posts that get declined are factually off or too thin, and both are fixable. Revise and push again.', + }, + { + q: 'How are the popular posts decided?', + a: `Popularity is measured by reader engagement (views and reader response) over the week, Monday 00:00 to Sunday 23:59 UTC. The ${WEEKLY_WINNERS} community posts that resonate most that week each win. Sharing your post and bringing your own readers genuinely helps.`, + }, + { + q: 'Can I submit more than one post?', + a: 'Yes, there is no limit on submissions. A single author can also place more than once in a week if multiple posts land.', + }, + { + q: 'Can I use AI to help write it?', + a: 'Yes, as a tool, not a ghostwriter. The experience and judgement must be yours, and you must disclose AI assistance. If you use Claude Code, the repo ships a /write-post skill that scaffolds a draft in our house format and style, which is the fastest way to start.', + }, + { + q: 'Do I get an author profile?', + a: 'Yes. Once your first post is merged, you can add yourself to our Experts directory with a bio, links, and your specialties, so readers (and potential clients) can find you.', + }, + { + q: 'How do I get paid?', + a: `Winners are contacted after the week closes and paid ${PRIZE_EACH} by a standard method such as PayPal or Wise. Where a cash prize is not allowed, we will arrange an equivalent.`, + }, +]; + +export default function CommunityPage() { + return ( +
+ Each week, from Monday to Sunday, the{' '} + {WEEKLY_WINNERS} most popular community + posts each win {PRIZE_EACH}. + Popularity comes down to reader engagement over the week, so the writing that genuinely + helps people is what gets rewarded. +
++ Five winners instead of one means more people get paid and more writers have a real shot, + especially early on. Share your post and bring your own readers, it counts. +
++ We announce each week's winners and call for the next round on X and LinkedIn. Follow + along so you know when the clock resets. +
++ Open a pull request with your article and join this week's challenge. Worst case, you get + a published, edited post with your name on it in front of thousands of engineers. +
+