The official website for Sigma Eta Pi (ΣΗΠ) at UC Irvine
This website showcases our fraternity's mission to foster entrepreneurial spirit, innovation, and brotherhood among UC Irvine students. Built with modern web technologies to provide an engaging experience for prospective members, current brothers, and the broader community.
- Framework: Next.js 14 with TypeScript
- Runtime: Bun
- Styling: Tailwind CSS with custom animations
- UI Components: Radix UI, shadcn/ui
- Animations: Framer Motion
- Image Optimization: Next.js Image component
- Icons: Lucide React, FontAwesome
- Deployment: Vercel
- Bun 1.0+
- Clone the repository:
git clone https://github.com/sepatuci/sepatuci-website.git
cd sepatuci-website- Install dependencies:
bun install- Run the development server:
bun dev- Open http://localhost:3000 in your browser.
src/
├── app/ # Next.js app router pages
│ ├── brotherhood/ # Brotherhood page
│ ├── founderseducation/ # Founder's Education page
│ ├── people/ # Members page
│ └── rush/ # Rush information page
├── components/ # React components
│ ├── BrotherhoodComponents/
│ ├── FEComponents/
│ ├── LandingComponents/
│ ├── PeopleComponents/
│ ├── RushComponents/
│ └── ui/ # Reusable UI components
├── assets/ # Images and static files
└── lib/ # Utility functions
The blog page is powered by an automated pipeline that fetches top stories from Hacker News, clusters related stories by topic, and synthesizes each cluster into one original long-form blog post using tencent/hy3-preview:free via OpenRouter. Generates up to 3 posts per run. The model is completely free.
- Create a free account at https://openrouter.ai
- Go to https://openrouter.ai/keys and create a new API key
- Open the
.envfile in the project root (create it if it doesn't exist) - Add this as line 1:
OPENROUTER_API_KEY=your_key_here
- Install dependencies:
npm install- Start the pipeline:
node server/cron.js- Fetching — pulls the top 50 stories from the Hacker News API (free, no auth required)
- Filtering — keeps only stories with score ≥ 100, a real URL, and at least one startup/tech keyword in the title
- Clustering — groups related stories by shared topic keywords (AI, Fundraising, Product, Growth, etc.) into clusters of 3–5
- Synthesis — sends each cluster's titles to
tencent/hy3-preview:freewhich writes one original long-form post on the unified theme — not a summary of any single article - Deduplication — each cluster gets a
cluster_hash(sorted story IDs joined) so the same cluster is never processed twice - Storage — posts saved to local SQLite at
/server/posts.dbwith source titles and URLs stored as JSON arrays - Serving — Express API at
/api/postsand/api/posts/:idserves posts to the blog page and individual post pages - Scheduling — runs automatically every day at 8am, generating up to 3 new posts per run
node server/cron.jsEach AI-generated post has its own page at /blog/{id} (numeric database ID). Clicking any post card on the blog listing navigates there. The page shows the full article, the source stories that inspired it, and a "What This Means For You" section.
To remove all AI-generated posts and start fresh:
npm run blog:resetThis does not affect the two original hardcoded posts on the blog page.
Open server/pipeline.js and adjust TECH_KEYWORDS (the keyword allowlist), SKIP_PREFIXES (HN thread types to skip), MAX_POSTS_PER_RUN (default 3), or the score threshold.
Stored at server/posts.db, gitignored. Columns: id, title, content, cluster_hash (dedup key), source_titles (JSON array), source_urls (JSON array), hn_score (average of cluster), category, generated_date.
"OPENROUTER_API_KEY is not set"— add your key to line 1 of the.envfile in the project rootdata.choices undefined— your API key may be invalid or the model may be temporarily unavailable. Check https://openrouter.ai/keys- Blog page empty — run
node server/cron.jsat least once to seed the database - Posts not generating — confirm your key is valid and the
tencent/hy3-preview:freemodel is still available at https://openrouter.ai/models
Add permanent posts by creating .mdx files in src/content/blog/:
export const metadata = {
title: "Post Title",
description: "Brief description for SEO",
date: "2025-01-15",
author: "SEP at UCI",
};
# Your Content
Write markdown here with **bold**, [links](/rush), etc.The site is automatically deployed to Vercel on every push to the main branch.
bun run build
bun run startWe welcome contributions! See our Contributing Guide for setup instructions, coding standards, and the full workflow.
- Website: sepatuci.com
- Instagram: @sepatuci
- LinkedIn: Sigma Eta Pi @ UCI
This project is private and proprietary to Sigma Eta Pi @ UC Irvine.
Built with ❤️ by the Sigma Eta Pi @ UCI Tech Team