From 05400faf18dddcb2040a144de69a4f8994c7fb75 Mon Sep 17 00:00:00 2001 From: AnumanyaJaiswal Date: Tue, 14 Oct 2025 01:11:20 +0530 Subject: [PATCH] Setup basic project folder structure with README files --- backend/.gitignore | 24 +++ backend/package.json | 33 ++++ backend/server.ts | 1 + backend/src/config/.gitkeep | 1 + backend/src/controllers/.gitkeep | 1 + backend/src/middleware/.gitkeep | 1 + backend/src/models/.gitkeep | 1 + backend/src/routes/.gitkeep | 1 + backend/src/utils/.gitkeep | 1 + backend/tsconfig.json | 7 + docs/README.md | 258 ++++++++++++++++++++++++++++++ frontend/.gitignore | 24 +++ frontend/components.json | 0 frontend/eslint.config.js | 23 +++ frontend/index.html | 13 ++ frontend/package.json | 33 ++++ frontend/postcss.config.js | 0 frontend/public/vite.svg | 1 + frontend/src/App.css | 42 +++++ frontend/src/App.tsx | 35 ++++ frontend/src/assets/react.svg | 1 + frontend/src/components/.gitkeep | 1 + frontend/src/hooks/.gitkeep | 1 + frontend/src/index.css | 68 ++++++++ frontend/src/lib/.gitkeep | 1 + frontend/src/main.tsx | 10 ++ frontend/src/pages/.gitkeep | 1 + frontend/tailwind.config.ts | 0 frontend/tsconfig.app.json | 28 ++++ package-lock.json | 265 ++++++++++++++++++++++++++++++- package.json | 5 +- 31 files changed, 875 insertions(+), 6 deletions(-) create mode 100644 backend/.gitignore create mode 100644 backend/package.json create mode 100644 backend/server.ts create mode 100644 backend/src/config/.gitkeep create mode 100644 backend/src/controllers/.gitkeep create mode 100644 backend/src/middleware/.gitkeep create mode 100644 backend/src/models/.gitkeep create mode 100644 backend/src/routes/.gitkeep create mode 100644 backend/src/utils/.gitkeep create mode 100644 backend/tsconfig.json create mode 100644 docs/README.md create mode 100644 frontend/.gitignore create mode 100644 frontend/components.json create mode 100644 frontend/eslint.config.js create mode 100644 frontend/index.html create mode 100644 frontend/package.json create mode 100644 frontend/postcss.config.js create mode 100644 frontend/public/vite.svg create mode 100644 frontend/src/App.css create mode 100644 frontend/src/App.tsx create mode 100644 frontend/src/assets/react.svg create mode 100644 frontend/src/components/.gitkeep create mode 100644 frontend/src/hooks/.gitkeep create mode 100644 frontend/src/index.css create mode 100644 frontend/src/lib/.gitkeep create mode 100644 frontend/src/main.tsx create mode 100644 frontend/src/pages/.gitkeep create mode 100644 frontend/tailwind.config.ts create mode 100644 frontend/tsconfig.app.json diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/backend/package.json b/backend/package.json new file mode 100644 index 0000000..889633c --- /dev/null +++ b/backend/package.json @@ -0,0 +1,33 @@ +{ + "name": "backend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@eslint/js": "^9.36.0", + "@types/node": "^24.6.0", + "@types/react": "^19.1.16", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.36.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.22", + "globals": "^16.4.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.45.0", + "vite": "npm:rolldown-vite@7.1.14" + }, + "overrides": { + "vite": "npm:rolldown-vite@7.1.14" + } +} diff --git a/backend/server.ts b/backend/server.ts new file mode 100644 index 0000000..593e406 --- /dev/null +++ b/backend/server.ts @@ -0,0 +1 @@ +// this is serer.js \ No newline at end of file diff --git a/backend/src/config/.gitkeep b/backend/src/config/.gitkeep new file mode 100644 index 0000000..b5e94ec --- /dev/null +++ b/backend/src/config/.gitkeep @@ -0,0 +1 @@ +#example file \ No newline at end of file diff --git a/backend/src/controllers/.gitkeep b/backend/src/controllers/.gitkeep new file mode 100644 index 0000000..b5e94ec --- /dev/null +++ b/backend/src/controllers/.gitkeep @@ -0,0 +1 @@ +#example file \ No newline at end of file diff --git a/backend/src/middleware/.gitkeep b/backend/src/middleware/.gitkeep new file mode 100644 index 0000000..b5e94ec --- /dev/null +++ b/backend/src/middleware/.gitkeep @@ -0,0 +1 @@ +#example file \ No newline at end of file diff --git a/backend/src/models/.gitkeep b/backend/src/models/.gitkeep new file mode 100644 index 0000000..b5e94ec --- /dev/null +++ b/backend/src/models/.gitkeep @@ -0,0 +1 @@ +#example file \ No newline at end of file diff --git a/backend/src/routes/.gitkeep b/backend/src/routes/.gitkeep new file mode 100644 index 0000000..b5e94ec --- /dev/null +++ b/backend/src/routes/.gitkeep @@ -0,0 +1 @@ +#example file \ No newline at end of file diff --git a/backend/src/utils/.gitkeep b/backend/src/utils/.gitkeep new file mode 100644 index 0000000..b5e94ec --- /dev/null +++ b/backend/src/utils/.gitkeep @@ -0,0 +1 @@ +#example file \ No newline at end of file diff --git a/backend/tsconfig.json b/backend/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/backend/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..ea822fb --- /dev/null +++ b/docs/README.md @@ -0,0 +1,258 @@ +# UniLoot 🎓🛒 +*Your Campus Marketplace. Sell your legacy, find your loot.* + +
+ +![License: MIT](https://img.shields.io/badge/license-MIT-blue) +![Contributions Welcome](https://img.shields.io/badge/contributions-welcome-brightgreen) +![Build Passing](https://img.shields.io/badge/build-passing-green) +![CI](https://github.com/OPCODE-Open-Spring-Fest/UniLoot/workflows/CI/badge.svg) +![Label Checker](https://github.com/OPCODE-Open-Spring-Fest/UniLoot/workflows/Label%20Checker/badge.svg) + +
+ +--- + +## Table of Contents + +- [Overview](#overview) +- [Core Features](#core-features) +- [User Roles & Journeys](#user-roles--journeys) +- [Platform Enhancements](#platform-enhancements) +- [Tech Stack](#tech-stack) +- [Folder Structure](#folder-structure) +- [Getting Started](#getting-started) +- [Contributing](#contributing) +- [Project Roadmap](#project-roadmap) +- [Contact & Acknowledgments](#contact--acknowledgments) + +--- + +## Overview + +**UniLoot** is a hyper-local, college-exclusive e-commerce platform built for seamless, secure, and affordable student-to-student selling. Graduating seniors can list used items (books, electronics, furniture, etc.), and juniors can find campus essentials either at a fixed price or by placing bids in auctions. The platform fosters trust via college email verification and reputation/rating mechanisms. + +--- + +## Core Features + +- **Dual Product Listings** + - *Fixed Price ("Buy Now")*: Set by seller; juniors can purchase instantly. + - *Auction (Negotiable)*: 48-hour bidding, minimum increment ₹100, seller can accept highest bid early. +- **User Authentication** + - Register/login with secure password protocol. + - Mandatory college email verification for access. +- **Seller Dashboard** + - Create, edit, manage listings, track bids, finalize sales. +- **Buyer Experience** + - Browse, filter, search; add fixed-price items to cart or bid in auctions. + - View and manage cart, bidding history. +- **Integrated Payments** + - Secure payment flow using Razorpay/Stripe, with platform commission if applicable. +- **Shopping Cart** + - Multi-item management and purchase. + +--- + +## User Roles & Journeys + +### 🎓 Senior (Seller) +- Onboards with college email. +- Lists products for sale, chooses fixed or auction format. +- Tracks and manages active listings and bids. +- Can accept a bid or let the auction finish. +- Receives funds when sale is confirmed. + +### 🧑‍🎓 Junior (Buyer) +- Registers with college email. +- Searches, browses, and filters all listings. +- Adds fixed-price items to cart and makes instant purchases. +- Places bids on auction items, receives live outbid notifications. +- Pays for items and arranges pickup with seller. + +--- + +## Platform Enhancements + +- **User Profiles:** Rate and review system builds trust for future transactions. +- **Direct Messaging:** Secure in-app chat for questions, logistics, and negotiation. +- **Advanced Categories & Search:** Find items by type, price, or sale type. +- **Escrow System:** Funds released only after buyers confirm item receipt. +- **Notification System:** Real-time email/app alerts for outbidding, sales, auction results, and more. +- **Wishlist:** Buyers can save and revisit interesting listings. +- **Admin Dashboard:** Site management, dispute resolution, and analytics. + +--- + +## Tech Stack + +| Layer | Technology Suggestion | +| ---------- | ------------------------------------------------ | +| Frontend | React.js (w/ Next.js SSR), or Vue.js | +| Backend | Node.js (Express.js), or Python (Django) | +| Database | PostgreSQL (preferred) or MongoDB | +| Real-time | Socket.IO or WebSockets (for bids & chat) | +| Payments | Razorpay or Stripe (API-integrated) | +| Email | Nodemailer, SendGrid, or similar | +| Deployment | Docker, Vercel/Netlify for frontend, VPS/cloud | + +--- + +## Folder Structure + +``` +UniLoot/ +├── .github/ # GitHub specific configurations +│ ├── workflows/ # CI/CD workflows +│ ├── ISSUE_TEMPLATE/ # Issue templates +│ └── Contributor_Guide/ # Contribution guidelines +├── frontend/ # Frontend application (to be created) +├── backend/ # Backend application (to be created) +├── docs/ # Documentation (to be created) +├── CODE_OF_CONDUCT.md # Code of conduct +├── README.md # This file +└── package.json # Node.js dependencies +``` + +--- + +## Getting Started + +### Prerequisites + +- Node.js (v20 or higher) +- npm or yarn +- Git + +### Installation + +1. **Clone the repository** + ```bash + git clone https://github.com/OPCODE-Open-Spring-Fest/UniLoot.git + cd UniLoot + ``` + +2. **Install dependencies** + ```bash + npm install + ``` + +3. **Set up commit hooks** + ```bash + npm run prepare + ``` + +### Development + +This project uses conventional commits. Make sure your commit messages follow the [Conventional Commits](https://www.conventionalcommits.org/) specification. + +```bash +# Example commit messages +git commit -m "feat: add user authentication" +git commit -m "fix: resolve payment gateway issue" +git commit -m "docs: update README with setup instructions" +``` + +### CI/CD Workflows + +This project has automated CI/CD workflows that run on every push and pull request: + +#### 🔍 Commitlint (CI Workflow) +- **Validates** all commit messages follow the [Conventional Commits](https://www.conventionalcommits.org/) format +- **Runs on**: Every push and pull request +- **Required format**: `type(scope): description` +- **Common types**: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore` + +#### 🏷️ Label Checker +- **Validates** that pull requests have required labels before merging +- **Required labels** (one from each group): + - **Type**: `Type:Easy`, `Type:Medium`, or `Type:Hard` + - **Semver**: `Semver:major`, `Semver:minor`, or `Semver:patch` + - **Status**: `PR:Accept` +- **Runs on**: Pull request opened, edited, synchronized, reopened, labeled, or unlabeled events + +All CI checks must pass before a pull request can be merged. + +--- + +## Contributing + +We welcome contributions from the community! 🎉 + +Please read our [Contributing Guide](.github/Contributor_Guide/Contributing.md) to learn about our development process, how to propose bugfixes and improvements, and how to build and test your changes. + +### Quick Contribution Steps + +1. Fork the repository +2. Create your feature branch (`git checkout -b feature/AmazingFeature`) +3. Commit your changes following [conventional commits](.github/Contributor_Guide/commiting.md) +4. Push to the branch (`git push origin feature/AmazingFeature`) +5. Open a Pull Request + +Make sure to: +- Follow the [Code of Conduct](CODE_OF_CONDUCT.md) +- Write clear commit messages following the conventional commits format +- Add appropriate labels to your PR (Type, Semver, and PR:Accept) +- Ensure all CI checks pass +- Update documentation as needed + +--- + +## Project Roadmap + +### Phase 1: Foundation (Current) +- [x] Repository setup +- [x] CI/CD pipeline configuration +- [ ] Database schema design +- [ ] API architecture planning + +### Phase 2: Core Development +- [ ] User authentication system +- [ ] Product listing functionality +- [ ] Bidding system implementation +- [ ] Payment gateway integration + +### Phase 3: Enhancements +- [ ] Real-time notifications +- [ ] In-app messaging +- [ ] User rating and review system +- [ ] Admin dashboard + +### Phase 4: Launch +- [ ] Beta testing +- [ ] Bug fixes and optimization +- [ ] Documentation completion +- [ ] Production deployment + +--- + +## Contact & Acknowledgments + +### Maintainers + +This project is maintained by the OPCODE community at IIIT Bhagalpur. + +### Acknowledgments + +- Thanks to all contributors who help make UniLoot better! +- Built as part of the Open Spring Fest initiative +- Special thanks to the open-source community + +### Support + +- 📧 Email: opcode@iiitbh.ac.in +- 🌐 Website: [OPCODE IIIT Bhagalpur](https://opcode.gymkhana.iiitbh.ac.in) +- 💬 Join our community discussions + +--- + +
+ +**Made with ❤️ by the OPCODE Community** + +[![GitHub stars](https://img.shields.io/github/stars/OPCODE-Open-Spring-Fest/UniLoot?style=social)](https://github.com/OPCODE-Open-Spring-Fest/UniLoot/stargazers) +[![GitHub forks](https://img.shields.io/github/forks/OPCODE-Open-Spring-Fest/UniLoot?style=social)](https://github.com/OPCODE-Open-Spring-Fest/UniLoot/network/members) +[![GitHub issues](https://img.shields.io/github/issues/OPCODE-Open-Spring-Fest/UniLoot)](https://github.com/OPCODE-Open-Spring-Fest/UniLoot/issues) +[![GitHub pull requests](https://img.shields.io/github/issues-pr/OPCODE-Open-Spring-Fest/UniLoot)](https://github.com/OPCODE-Open-Spring-Fest/UniLoot/pulls) + +
diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/frontend/components.json b/frontend/components.json new file mode 100644 index 0000000..e69de29 diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 0000000..b19330b --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,23 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' +import { defineConfig, globalIgnores } from 'eslint/config' + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.recommended, + reactHooks.configs['recommended-latest'], + reactRefresh.configs.vite, + ], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]) diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 0000000..072a57e --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,13 @@ + + + + + + + frontend + + +
+ + + diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..eecfe08 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,33 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "react": "^19.1.1", + "react-dom": "^19.1.1" + }, + "devDependencies": { + "@eslint/js": "^9.36.0", + "@types/node": "^24.6.0", + "@types/react": "^19.1.16", + "@types/react-dom": "^19.1.9", + "@vitejs/plugin-react": "^5.0.4", + "eslint": "^9.36.0", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-refresh": "^0.4.22", + "globals": "^16.4.0", + "typescript": "~5.9.3", + "typescript-eslint": "^8.45.0", + "vite": "npm:rolldown-vite@7.1.14" + }, + "overrides": { + "vite": "npm:rolldown-vite@7.1.14" + } +} diff --git a/frontend/postcss.config.js b/frontend/postcss.config.js new file mode 100644 index 0000000..e69de29 diff --git a/frontend/public/vite.svg b/frontend/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/frontend/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/App.css b/frontend/src/App.css new file mode 100644 index 0000000..b9d355d --- /dev/null +++ b/frontend/src/App.css @@ -0,0 +1,42 @@ +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; + text-align: center; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx new file mode 100644 index 0000000..3d7ded3 --- /dev/null +++ b/frontend/src/App.tsx @@ -0,0 +1,35 @@ +import { useState } from 'react' +import reactLogo from './assets/react.svg' +import viteLogo from '/vite.svg' +import './App.css' + +function App() { + const [count, setCount] = useState(0) + + return ( + <> +
+ + Vite logo + + + React logo + +
+

Vite + React

+
+ +

+ Edit src/App.tsx and save to test HMR +

+
+

+ Click on the Vite and React logos to learn more +

+ + ) +} + +export default App diff --git a/frontend/src/assets/react.svg b/frontend/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/frontend/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/frontend/src/components/.gitkeep b/frontend/src/components/.gitkeep new file mode 100644 index 0000000..b5e94ec --- /dev/null +++ b/frontend/src/components/.gitkeep @@ -0,0 +1 @@ +#example file \ No newline at end of file diff --git a/frontend/src/hooks/.gitkeep b/frontend/src/hooks/.gitkeep new file mode 100644 index 0000000..b5e94ec --- /dev/null +++ b/frontend/src/hooks/.gitkeep @@ -0,0 +1 @@ +#example file \ No newline at end of file diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..08a3ac9 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,68 @@ +:root { + font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; + line-height: 1.5; + font-weight: 400; + + color-scheme: light dark; + color: rgba(255, 255, 255, 0.87); + background-color: #242424; + + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + font-weight: 500; + color: #646cff; + text-decoration: inherit; +} +a:hover { + color: #535bf2; +} + +body { + margin: 0; + display: flex; + place-items: center; + min-width: 320px; + min-height: 100vh; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } + a:hover { + color: #747bff; + } + button { + background-color: #f9f9f9; + } +} diff --git a/frontend/src/lib/.gitkeep b/frontend/src/lib/.gitkeep new file mode 100644 index 0000000..b5e94ec --- /dev/null +++ b/frontend/src/lib/.gitkeep @@ -0,0 +1 @@ +#example file \ No newline at end of file diff --git a/frontend/src/main.tsx b/frontend/src/main.tsx new file mode 100644 index 0000000..bef5202 --- /dev/null +++ b/frontend/src/main.tsx @@ -0,0 +1,10 @@ +import { StrictMode } from 'react' +import { createRoot } from 'react-dom/client' +import './index.css' +import App from './App.tsx' + +createRoot(document.getElementById('root')!).render( + + + , +) diff --git a/frontend/src/pages/.gitkeep b/frontend/src/pages/.gitkeep new file mode 100644 index 0000000..b5e94ec --- /dev/null +++ b/frontend/src/pages/.gitkeep @@ -0,0 +1 @@ +#example file \ No newline at end of file diff --git a/frontend/tailwind.config.ts b/frontend/tailwind.config.ts new file mode 100644 index 0000000..e69de29 diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000..a9b5a59 --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2022", + "useDefineForClassFields": true, + "lib": ["ES2022", "DOM", "DOM.Iterable"], + "module": "ESNext", + "types": ["vite/client"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "verbatimModuleSyntax": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/package-lock.json b/package-lock.json index 300a1b2..01f29c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "template", + "name": "UniLoot", "lockfileVersion": 3, "requires": true, "packages": { @@ -7,7 +7,10 @@ "devDependencies": { "@commitlint/cli": "^19.1.0", "@commitlint/config-conventional": "^19.1.0", - "husky": "^9.0.11" + "autoprefixer": "^10.4.21", + "husky": "^9.0.11", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.14" } }, "node_modules/@babel/code-frame": { @@ -438,6 +441,88 @@ "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.16.tgz", + "integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/browserslist": { + "version": "4.26.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -447,6 +532,27 @@ "node": ">=6" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001750", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz", + "integrity": "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, "node_modules/chalk": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", @@ -624,6 +730,13 @@ "node": ">=8" } }, + "node_modules/electron-to-chromium": { + "version": "1.5.235", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.235.tgz", + "integrity": "sha512-i/7ntLFwOdoHY7sgjlTIDo4Sl8EdoTjWIaKinYOVfC6bOp71bmwenyZthWHcasxgHDNWbWxvG9M3Ia116zIaYQ==", + "dev": true, + "license": "ISC" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -640,10 +753,11 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -703,6 +817,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -1077,6 +1205,42 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.23", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.23.tgz", + "integrity": "sha512-cCmFDMSm26S6tQSDpBCg/NR8NENrVPhAJSf+XbxBG4rPFaaonlEoE9wHQmun+cls499TQGSb7ZyPBRlzgKfpeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npm-run-path": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", @@ -1206,6 +1370,49 @@ "node": ">=8" } }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -1290,6 +1497,16 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -1349,6 +1566,13 @@ "node": ">=4" } }, + "node_modules/tailwindcss": { + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.14.tgz", + "integrity": "sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA==", + "dev": true, + "license": "MIT" + }, "node_modules/text-extensions": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-2.4.0.tgz", @@ -1399,6 +1623,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", diff --git a/package.json b/package.json index 929c798..53ab1e1 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,10 @@ "devDependencies": { "@commitlint/cli": "^19.1.0", "@commitlint/config-conventional": "^19.1.0", - "husky": "^9.0.11" + "autoprefixer": "^10.4.21", + "husky": "^9.0.11", + "postcss": "^8.5.6", + "tailwindcss": "^4.1.14" }, "scripts": { "prepare": "husky",