@@ -1,36 +1,91 @@
|
||||
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
|
||||
<h1 align="center">
|
||||
<br>
|
||||
<a href="https://dev-run.netlify.app/">
|
||||
<img src="public/dev-run-icon.svg" alt="DevRun" width="270">
|
||||
</a>
|
||||
<br>
|
||||
DevRun
|
||||
<br>
|
||||
</h1>
|
||||
|
||||
## Getting Started
|
||||
<h4 align="center">
|
||||
A community-driven competitive programming platform inspired by speedrunning.
|
||||
<br>
|
||||
Start a run, reset, improve your PB, and compete for the fastest times.
|
||||
</h4>
|
||||
|
||||
First, run the development server:
|
||||
<p align="center">
|
||||
<a href="#key-features">Key Features</a> •
|
||||
<a href="#contributing">Contributing</a> •
|
||||
<a href="#license">License</a>
|
||||
</p>
|
||||
|
||||

|
||||
|
||||
## Key Features
|
||||
|
||||
### Runs & Speedrunning Mechanics
|
||||
|
||||
- **Run-Based Gameplay** — Problems are played as _runs_, not isolated challenges. Start a run, solve problems in sequence, and race the clock.
|
||||
- **Splits & PBs** — Track per-problem splits and your personal bests, just like speedrunning.
|
||||
- **Reset & Retry** — Reset runs at any time and try again to beat your previous time.
|
||||
|
||||
### Problems & Categories
|
||||
|
||||
- **Curated Problem Sets** — Problems are grouped into runs with varying difficulty and themes.
|
||||
- **Categories** — Compete in different categories such as Any%, No-Hints, or Practice.
|
||||
- **No Interview Pressure** — DevRun is built for fun, learning, and improvement, not job prep.
|
||||
|
||||
### Leaderboards & Community
|
||||
|
||||
- **Global & Weekly Leaderboards** — Compare runs with other DevRunners around the world.
|
||||
- **Runner Profiles** — View stats like total runs, PBs, and recent attempts.
|
||||
- **Community-First Design** — Competitive, but casual. Built for hobbyists.
|
||||
|
||||
### UI & Experience
|
||||
|
||||
- **Minimal, Dark UI** — Black theme with subtle purple highlights, designed for focus.
|
||||
- **Fast & Responsive** — Lightweight interface with subtle motion and feedback.
|
||||
- **Speedrunning Language** — Runs, PBs, resets, clean runs, the culture comes first.
|
||||
|
||||
### Planned Features
|
||||
|
||||
- Custom runs and community-created problem sets
|
||||
- Seasonal events and themed runs
|
||||
- More categories and run modifiers
|
||||
|
||||
## Contributing
|
||||
|
||||
DevRun is a community-driven project, and contributions of all kinds are welcome — code, design, ideas, and feedback.
|
||||
|
||||
### Ways to Contribute
|
||||
|
||||
- **UI / UX improvements** — layout tweaks, animations, accessibility, theming
|
||||
- **Problem & run ideas** — suggest fun challenges or speedrun-style categories
|
||||
- **Bug reports** — even visual or copy issues help a lot
|
||||
- **Docs & copy** — improve wording, onboarding, or community tone
|
||||
|
||||
### Guidelines
|
||||
|
||||
- Keep things **simple and playful** — DevRun is not an interview platform.
|
||||
- Prioritize **clarity, performance, and readability** over cleverness.
|
||||
- Avoid over-engineering; this project values iteration and experimentation.
|
||||
- Be respectful and constructive — competition stays in the runs, not the PRs.
|
||||
|
||||
### Getting Started
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch
|
||||
3. Make your changes
|
||||
4. Open a pull request with a clear description of what you changed and why
|
||||
|
||||
---
|
||||
|
||||
By contributing, you agree to follow the project’s Code of Conduct.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/orus-dev/devrun.git
|
||||
cd devrun
|
||||
npm install
|
||||
npm run dev
|
||||
# or
|
||||
yarn dev
|
||||
# or
|
||||
pnpm dev
|
||||
# or
|
||||
bun dev
|
||||
```
|
||||
|
||||
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
||||
|
||||
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
|
||||
|
||||
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
|
||||
|
||||
## Learn More
|
||||
|
||||
To learn more about Next.js, take a look at the following resources:
|
||||
|
||||
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
||||
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
||||
|
||||
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
|
||||
|
||||
## Deploy on Vercel
|
||||
|
||||
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
||||
|
||||
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
|
||||
|
||||
|
After Width: | Height: | Size: 8.5 KiB |
@@ -0,0 +1,15 @@
|
||||
<svg width="41" height="38" viewBox="0 0 41 38" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M2 34.96H23.5" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M18 26.8533H33" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M2 26.8533H12" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M33 18.81H38.2" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path opacity="0.4" d="M12 18.81H27.2" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M2 18.81H6.2" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M25 10.7667H33" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M2 10.7667H19" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M2 2.66L12.9997 2.53334" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M19 2.53333L24.4995 2.65998" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path opacity="0.25" d="M6 5.66751C5.99981 5.02239 6.16791 4.38864 6.48731 3.83025C6.80672 3.27186 7.26613 2.8086 7.81916 2.48725C8.37218 2.1659 8.99924 1.99783 9.63702 2.00002C10.2748 2.00221 10.9007 2.17458 11.4516 2.49972L33.1945 15.3285C33.7432 15.6506 34.1987 16.1127 34.5156 16.6686C34.8324 17.2246 34.9995 17.8549 35 18.4966C35.0006 19.1383 34.8346 19.7689 34.5187 20.3254C34.2028 20.8819 33.7481 21.3448 33.1999 21.6678L11.4516 34.5003C10.9007 34.8254 10.2748 34.9978 9.63702 35C8.99924 35.0022 8.37218 34.8341 7.81916 34.5128C7.26613 34.1914 6.80672 33.7281 6.48731 33.1698C6.16791 32.6114 5.99981 31.9776 6 31.3325V5.66751Z" fill="black"/>
|
||||
<path opacity="0.5" d="M22 23L26 19L22 15" stroke="#C084FC" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path opacity="0.5" d="M16 23L12 19L16 15" stroke="#C084FC" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -1,12 +1,16 @@
|
||||
<svg width="41" height="25" viewBox="0 0 41 25" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M8 3H10.5" stroke="#C084FC" stroke-width="2.3" stroke-linecap="round"/>
|
||||
<path d="M15 3H20.5" stroke="#C084FC" stroke-width="2.3" stroke-linecap="round"/>
|
||||
<path d="M3 12H7.5" stroke="#C084FC" stroke-width="2.3" stroke-linecap="round"/>
|
||||
<path d="M11.7 12H16.9999" stroke="#C084FC" stroke-width="2.3" stroke-linecap="round"/>
|
||||
<path d="M7 16.6H17.3" stroke="#C084FC" stroke-width="2.3" stroke-linecap="round"/>
|
||||
<path d="M6.69995 7.1H18.5" stroke="#C084FC" stroke-width="2.3" stroke-linecap="round"/>
|
||||
<path d="M10.3 21.4H11.0404" stroke="#C084FC" stroke-width="2.3" stroke-linecap="round"/>
|
||||
<path d="M21 2.9987C48.1291 1.02589 42.7403 25.5226 16 21.9987L21 2.9987Z" stroke="#C084FC" stroke-width="3" stroke-linecap="round"/>
|
||||
<path d="M26.5 16L23.5 13L26.5 10" stroke="#C084FC" stroke-width="2" stroke-linecap="round"/>
|
||||
<path d="M30 16L33 13L30 10" stroke="#C084FC" stroke-width="2" stroke-linecap="round"/>
|
||||
<svg width="74" height="74" viewBox="0 0 74 74" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="74" height="74" fill="black"/>
|
||||
<path d="M19 52.96H40.5" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M35 44.8533H50" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M19 44.8533H29" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M50 36.81H55.2" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path opacity="0.4" d="M29 36.81H44.2" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M19 36.81H23.2" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M42 28.7667H50" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M19 28.7667H36" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M19 20.66L29.9997 20.5333" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path d="M36 20.5333L41.4995 20.66" stroke="#C084FC" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path opacity="0.25" d="M23 23.6675C22.9998 23.0224 23.1679 22.3886 23.4873 21.8302C23.8067 21.2719 24.2661 20.8086 24.8192 20.4872C25.3722 20.1659 25.9992 19.9978 26.637 20C27.2748 20.0022 27.9007 20.1746 28.4516 20.4997L50.1945 33.3285C50.7432 33.6506 51.1987 34.1127 51.5156 34.6686C51.8324 35.2246 51.9995 35.8549 52 36.4966C52.0006 37.1383 51.8346 37.7689 51.5187 38.3254C51.2028 38.8819 50.7481 39.3448 50.1999 39.6678L28.4516 52.5003C27.9007 52.8254 27.2748 52.9978 26.637 53C25.9992 53.0022 25.3722 52.8341 24.8192 52.5128C24.2661 52.1914 23.8067 51.7281 23.4873 51.1698C23.1679 50.6114 22.9998 49.9776 23 49.3325V23.6675Z" fill="black"/>
|
||||
<path opacity="0.5" d="M39 41L43 37L39 33" stroke="#C084FC" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
<path opacity="0.5" d="M33 41L29 37L33 33" stroke="#C084FC" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 1014 B After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 334 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 106 KiB |
@@ -15,8 +15,9 @@ const geistMono = Geist_Mono({
|
||||
});
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Create Next App",
|
||||
description: "Generated by create next app",
|
||||
title: "DevRun - Code Fast. Run Faster.",
|
||||
description:
|
||||
"Race the clock through challenges, track your splits, and compete for the fastest runs on the global leaderboard.",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -17,7 +17,7 @@ const Footer = () => {
|
||||
<div className="flex items-center gap-2 mb-4">
|
||||
<img
|
||||
alt="Logo"
|
||||
src="/dev-run.svg"
|
||||
src="/dev-run-icon.svg"
|
||||
className="h-8 w-8 text-primary transition-transform duration-300 group-hover:scale-110"
|
||||
/>
|
||||
<span className="text-lg font-bold">
|
||||
|
||||
@@ -36,7 +36,7 @@ const Navbar = () => {
|
||||
<div className="relative">
|
||||
<img
|
||||
alt="Logo"
|
||||
src="/dev-run.svg"
|
||||
src="/dev-run-icon.svg"
|
||||
className="h-8 w-8 text-primary transition-transform duration-300 group-hover:scale-110"
|
||||
/>
|
||||
<div className="absolute inset-0 bg-primary/30 blur-xl opacity-0 group-hover:opacity-100 transition-opacity duration-300" />
|
||||
|
||||