|
1 | 1 | import Link from "next/link"; |
2 | | -import { ArrowRight, Bot, Brain, Code2, Database, Sigma } from "lucide-react"; |
| 2 | +import { ArrowRight, Bot, Brain, Code2, Database, ExternalLink, GitPullRequest, ListChecks, Sigma } from "lucide-react"; |
3 | 3 |
|
4 | 4 | import { buttonVariants } from "@/components/ui/button"; |
5 | 5 | import { cn } from "@/lib/utils"; |
@@ -40,6 +40,47 @@ const tracks = [ |
40 | 40 | } |
41 | 41 | ]; |
42 | 42 |
|
| 43 | +const publicationRules = [ |
| 44 | + { |
| 45 | + title: "Публикуй материал в нужный трек", |
| 46 | + description: "Размещай файл в соответствующем разделе: `python`, `ai`, `bigdata`, `java` или `algorithms`." |
| 47 | + }, |
| 48 | + { |
| 49 | + title: "Соблюдай единый формат", |
| 50 | + description: "Используй понятную структуру: цель, шаги решения, код, результат и краткие выводы." |
| 51 | + }, |
| 52 | + { |
| 53 | + title: "Оформляй кодовые примеры", |
| 54 | + description: "Добавляй язык в код-блоки и оставляй только воспроизводимые, проверенные фрагменты." |
| 55 | + }, |
| 56 | + { |
| 57 | + title: "Фиксируй контекст и источники", |
| 58 | + description: "Если материал опирается на внешние источники, обязательно оставляй ссылки и пояснения." |
| 59 | + }, |
| 60 | + { |
| 61 | + title: "Проверяй изменения перед PR", |
| 62 | + description: "Перед публикацией запускай `npm run lint` и `npm run typecheck`, чтобы не ломать сборку." |
| 63 | + } |
| 64 | +]; |
| 65 | + |
| 66 | +const pullRequestLinks = [ |
| 67 | + { |
| 68 | + title: "Создать Pull Request", |
| 69 | + href: "https://github.com/MinAleDm/StackMIREA/compare?expand=1", |
| 70 | + description: "Откроет форму сравнения веток и создания PR для публикации." |
| 71 | + }, |
| 72 | + { |
| 73 | + title: "Все Pull Request", |
| 74 | + href: "https://github.com/MinAleDm/StackMIREA/pulls", |
| 75 | + description: "Список открытых и закрытых PR по проекту." |
| 76 | + }, |
| 77 | + { |
| 78 | + title: "Открытые Pull Request", |
| 79 | + href: "https://github.com/MinAleDm/StackMIREA/pulls?q=is%3Apr+is%3Aopen", |
| 80 | + description: "Быстрый фильтр для проверки, что уже находится на ревью." |
| 81 | + } |
| 82 | +]; |
| 83 | + |
43 | 84 | export default function HomePage() { |
44 | 85 | return ( |
45 | 86 | <div className="mx-auto w-full max-w-[1440px] px-4 pb-20 pt-14 sm:px-6 lg:px-8"> |
@@ -111,6 +152,59 @@ export default function HomePage() { |
111 | 152 | ); |
112 | 153 | })} |
113 | 154 | </section> |
| 155 | + |
| 156 | + <section className="mt-10 grid gap-4 lg:grid-cols-2"> |
| 157 | + <article className="rounded-2xl border border-border/70 bg-card/70 p-6"> |
| 158 | + <div className="inline-flex items-center gap-2 rounded-full border border-border/80 bg-background/70 px-3 py-1 text-xs text-muted-foreground"> |
| 159 | + <ListChecks className="size-3.5" /> |
| 160 | + Правила публикации |
| 161 | + </div> |
| 162 | + <h2 className="mt-4 text-2xl font-semibold tracking-tight">Как публиковать материалы в StackMIREA</h2> |
| 163 | + <ol className="mt-5 space-y-4"> |
| 164 | + {publicationRules.map((rule, index) => ( |
| 165 | + <li key={rule.title} className="flex gap-3 rounded-xl border border-border/70 bg-background/60 p-4"> |
| 166 | + <span className="inline-flex size-6 shrink-0 items-center justify-center rounded-full bg-primary/10 text-sm font-semibold text-primary"> |
| 167 | + {index + 1} |
| 168 | + </span> |
| 169 | + <div> |
| 170 | + <h3 className="text-sm font-semibold text-foreground">{rule.title}</h3> |
| 171 | + <p className="mt-1 text-sm leading-6 text-muted-foreground">{rule.description}</p> |
| 172 | + </div> |
| 173 | + </li> |
| 174 | + ))} |
| 175 | + </ol> |
| 176 | + </article> |
| 177 | + |
| 178 | + <article className="rounded-2xl border border-border/70 bg-card/70 p-6"> |
| 179 | + <div className="inline-flex items-center gap-2 rounded-full border border-border/80 bg-background/70 px-3 py-1 text-xs text-muted-foreground"> |
| 180 | + <GitPullRequest className="size-3.5" /> |
| 181 | + Публикация через PR |
| 182 | + </div> |
| 183 | + <h2 className="mt-4 text-2xl font-semibold tracking-tight">Ссылки на Pull Request</h2> |
| 184 | + <p className="mt-3 text-sm leading-6 text-muted-foreground"> |
| 185 | + Для публикации открывай PR с изменениями в документации. В описании укажи, что именно добавлено и в каком |
| 186 | + треке лежит материал. |
| 187 | + </p> |
| 188 | + |
| 189 | + <div className="mt-5 space-y-3"> |
| 190 | + {pullRequestLinks.map((item) => ( |
| 191 | + <a |
| 192 | + key={item.href} |
| 193 | + href={item.href} |
| 194 | + target="_blank" |
| 195 | + rel="noreferrer" |
| 196 | + className="group flex items-start justify-between gap-3 rounded-xl border border-border/70 bg-background/60 p-4 transition-colors hover:border-primary/40" |
| 197 | + > |
| 198 | + <span> |
| 199 | + <span className="block text-sm font-semibold text-foreground">{item.title}</span> |
| 200 | + <span className="mt-1 block text-sm leading-6 text-muted-foreground">{item.description}</span> |
| 201 | + </span> |
| 202 | + <ExternalLink className="mt-0.5 size-4 shrink-0 text-muted-foreground transition-colors group-hover:text-primary" /> |
| 203 | + </a> |
| 204 | + ))} |
| 205 | + </div> |
| 206 | + </article> |
| 207 | + </section> |
114 | 208 | </div> |
115 | 209 | ); |
116 | 210 | } |
0 commit comments