A comprehensive, SEO-optimized web application for calculating final grades, weighted grades, and grade conversions. Built with Next.js 15, TypeScript, and Tailwind CSS.
Explore the hosted experience at finalgradecalculator.app.

# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Start production server
npm start
Open http://localhost:3000 to view the application.
final-grade-calculator/
├── app/ # Next.js App Router pages
│ ├── page.tsx # Home (Final Grade Calculator)
│ ├── weighted-grade-calculator/
│ ├── grade-converter/
│ ├── how-to-calculate-final-grade/
│ ├── grade-calculator-guide/
│ ├── weighted-vs-unweighted-grades/
│ ├── college-grading-systems/
│ ├── what-grade-do-i-need/
│ ├── calculators/
│ ├── layout.tsx # Root layout with Header/Footer
│ └── globals.css # Global styles with custom CSS variables
├── components/ # React components
│ ├── Header.tsx
│ ├── Footer.tsx
│ ├── FinalGradeCalculator.tsx
│ ├── WeightedGradeCalculator.tsx
│ └── GradeConverter.tsx
├── lib/ # Utility functions
│ ├── gradeCalculations.ts # Grade calculation logic
│ └── seo.ts # SEO metadata helpers
├── public/ # Static assets
│ ├── logo.png
│ ├── robots.txt
│ └── sitemap.xml
└── PRODUCT_PLAN.md # Product requirements document
This project is optimized for deployment on Vercel:
The site can be deployed on any platform that supports Next.js:
Update the canonical URL in /lib/seo.ts:
const BASE_URL = 'https://finalgradecalculator.app';
Add your verification code in /app/layout.tsx:
verification: {
google: "your-google-site-verification-code",
}
The sitemap is located at /public/sitemap.xml. Update the lastmod dates after making content changes.
Update brand colors in /app/globals.css:
:root {
--primary: #0EA5E9; /* Main blue */
--primary-dark: #0369A1; /* Dark blue */
--primary-light: #7DD3FC; /* Light blue */
}
Modify the grading scale in /lib/gradeCalculations.ts to match your institution’s standards.
This project is open source and available for educational purposes.
For issues or questions, please check the documentation or open an issue in the repository.