A modern, full-stack website for the Penn State Competitive Cyber Security Organization (CCSO), featuring event management, member resources, and CTF competition information.
The CCSO Website is a comprehensive platform that showcases the organization's activities, events, and resources. Built with modern web technologies, it provides an engaging experience for members, sponsors, and visitors interested in cybersecurity competitions and education.
- Event Management: Dynamic event pages with countdown timers (e.g., SillyCTF)
- Activity Showcase: Interactive flip cards displaying organization activities
- Calendar Integration: Upcoming events calendar widget
- Responsive Design: Mobile-first approach with Tailwind CSS
- Content Management: Headless CMS integration with Strapi
- Discord Integration: Direct links to community Discord server
- Modern UI/UX: Animated backgrounds, smooth transitions, and engaging visuals
- Framework: Nuxt 3 (Vue.js)
- Styling: Tailwind CSS
- Icons: Heroicons
- Image Optimization: @nuxt/image
- Charts: Chart.js
- Maps: Leaflet
- TypeScript: Full type safety support
- CMS: Strapi 5.20.0
- Database: PostgreSQL
- Plugins:
- CKEditor for rich text editing
- SEO plugin
- Documentation plugin
- Users & Permissions
.
├── frontend/ # Nuxt 3 frontend application
│ ├── assets/ # Static assets (CSS, images)
│ ├── components/ # Vue components
│ ├── composables/ # Vue composables
│ ├── pages/ # Application pages/routes
│ ├── utils/ # Utility functions
│ └── public/ # Public static files
│
└── backend/ # Strapi CMS backend
├── config/ # Strapi configuration
├── database/ # Database migrations
├── src/ # Strapi source code
└── public/ # Public files
- Node.js: >=18.0.0 <=22.x.x
- npm: >=6.0.0
- PostgreSQL: For backend database
-
Clone the repository
git clone <repository-url> cd <project-directory>
-
Install Frontend Dependencies
cd frontend npm install -
Install Backend Dependencies
cd ../backend npm install -
Configure Environment Variables
Create a
.envfile in thefrontenddirectory:NUXT_PUBLIC_API_BASE=http://localhost:1337
Create a
.envfile in thebackenddirectory with your Strapi configuration:DATABASE_CLIENT=postgres DATABASE_HOST=localhost DATABASE_PORT=5432 DATABASE_NAME=ccso_db DATABASE_USERNAME=your_username DATABASE_PASSWORD=your_password
-
Start the Backend (Strapi)
cd backend npm run developThe Strapi admin panel will be available at
http://localhost:1337/admin -
Start the Frontend (Nuxt)
cd frontend npm run devThe website will be available at
http://localhost:8080
Frontend:
cd frontend
npm run build
npm run previewBackend:
cd backend
npm run build
npm run startnpm run dev- Start development servernpm run build- Build for productionnpm run generate- Generate static sitenpm run preview- Preview production buildnpm run lint- Run ESLintnpm run format- Format code with Prettier
npm run develop- Start Strapi in development modenpm run start- Start Strapi in production modenpm run build- Build Strapi admin panelnpm run strapi- Run Strapi CLI commands
- Home (
/) - Organization overview and activities - About (
/about) - Information about CCSO - Events (
/events/*) - Event pages including SillyCTF - Sponsor Us (
/sponsor-us) - Sponsorship information
- Animated Background: Lava lamp-style gradient animation
- Responsive Layout: Mobile-first design with breakpoints
- Smooth Transitions: Page transitions and component animations
- Modern UI Components: Flip cards, calendar widgets, rotating galleries
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is private and proprietary to the Penn State Competitive Cyber Security Organization.
- Discord: Join our Discord server
- Organization: Penn State Competitive Cyber Security Organization
Penn State Competitive Cyber Security Organization (CCSO)
Note: This website is maintained by the CCSO development team. For questions or issues, please contact the organization through Discord or other official channels.