This is a Next.js project bootstrapped with
create-next-app.
First, run the development server:
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun devOpen 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 to automatically optimize and load Geist, a new font family for Vercel.
This project supports 3 Firebase environments:
| Environment | Description | Firebase Project |
|---|---|---|
rur-24-prod |
Production (RUR 24, previous year) | rur-24 |
rur-26-prod |
Production (RUR 26, current year) | rur-26-web-prod |
rur-26-dev |
Development/Staging | rur-26-dev |
To run the project locally with different environments, first copy .env.example to create your environment files:
# For rur-24-prod environment (previous year)
cp .env.example .env.rur-24-prod
# Edit .env.rur-24-prod with rur-24 Firebase credentials
# For rur-26-prod environment (current year)
cp .env.example .env.rur-26-prod
# Edit .env.rur-26-prod with prod-26 Firebase credentials
# For rur-26-dev environment
cp .env.example .env.rur-26-dev
# Edit .env.rur-26-dev with dev Firebase credentials
# For default local development
cp .env.example .env.local
# Edit .env.local with your preferred Firebase credentialsThen run the development server with your chosen environment:
# Default local development (uses .env.local)
npm run dev
# Run with rur-24-prod environment (previous year)
npm run dev:rur-24-prod
# Run with rur-26-prod environment (current year)
npm run dev:rur-26-prod
# Run with rur-26-dev environment
npm run dev:rur-26-dev# Standard build (uses .env.local or environment variables)
npm run build
# Build for specific environments
npm run build:rur-24-prod
npm run build:rur-26-prod
npm run build:rur-26-dev- Deploys via FTP (primary)
- Deploys to Firebase Hosting
rur-24-prodenvironment (backup)
- Deploys to all 3 Firebase Hosting environments (rur-24-prod, rur-26-prod, rur-26-dev)
- Can be manually triggered with environment selection via GitHub Actions
- Creates preview deployments on all 3 environments
For each environment, the following secrets need to be configured:
RUR-24 (rur-24) - Previous Year:
NEXT_PUBLIC_API_KEY_RUR_24NEXT_PUBLIC_AUTH_DOMAIN_RUR_24NEXT_PUBLIC_PROJECT_ID_RUR_24NEXT_PUBLIC_STORAGE_BUCKET_RUR_24NEXT_PUBLIC_MESSAGING_SENDER_ID_RUR_24NEXT_PUBLIC_APP_ID_RUR_24FIREBASE_SERVICE_ACCOUNT_RUR_24
Prod-26 (rur-26-web-prod) - Current Year:
NEXT_PUBLIC_API_KEY_PROD_26NEXT_PUBLIC_AUTH_DOMAIN_PROD_26NEXT_PUBLIC_PROJECT_ID_PROD_26NEXT_PUBLIC_STORAGE_BUCKET_PROD_26NEXT_PUBLIC_MESSAGING_SENDER_ID_PROD_26NEXT_PUBLIC_APP_ID_PROD_26FIREBASE_SERVICE_ACCOUNT_PROD_26
Dev (rur-26-dev):
NEXT_PUBLIC_API_KEY_DEVNEXT_PUBLIC_AUTH_DOMAIN_DEVNEXT_PUBLIC_PROJECT_ID_DEVNEXT_PUBLIC_STORAGE_BUCKET_DEVNEXT_PUBLIC_MESSAGING_SENDER_ID_DEVNEXT_PUBLIC_APP_ID_DEVFIREBASE_SERVICE_ACCOUNT_DEV
FTP Deployment (main branch only):
FTP_SERVERFTP_USERNAMEFTP_PASSWORD
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!
The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.
Check out our Next.js deployment documentation for more details.
// adding timeline event
addTimeLineEvent(event).then(docRef => {
// success
}).catch(error => {
// error
});// limit & docAfter is optional
// default limit is 10
// if docAfter is set, return Time line events starting from docAfter document.
// order by events order property
getTimeLineEvents(limit,docAfter).then(data => {
// success
}).catch(error => {
// error
});// deleting an event
deleteTimeLineEvent("TimelineEventDocumentId").then(res => {
// success
}).catch(error => {
// error
});// sponsorshipCategory valied values => "Gold","Silver","Bronze","All"
getSponsers(sponsorshipCategory).then(data => {
// success
}).catch(error => {
// error
}); const sponsor = {
level: "sponsorshipCategory",
sponsor: "Company Name"
} as ISponser;
addSponser(sponsor).then(res => {
// success
}).catch(error => {
// error
});deleteSponser("x2xFMFgzeOQgqKese7fG").then(res => {
// success
}).catch(error => {
// error
});// example for uploading a file to firebase storage on file change in file input.
// import getDownloadURL from firebase/storage
<label htmlFor="test">File</label>
<input id="test" name="test" type="file" onChange={(e)=>{
let reference;
if(e.target.files){
reference = addFile(e.target.files[0]).then((ref)=>{
return ref;
});
if(reference != null){
reference.then((ref)=>{
if(ref){
getDownloadURL(ref).then((url)=>{
});
}
})
.catch((error)=>{
console.log("Error",error);
});
}
}
}} /> // delete firebase storage file from StorageReference
const ref1 = ref(getStorage(),'images/test.png');
deleteFile(ref1).then((res)=>{
// file deleted
}).catch((error)=>{
// error
});