Scan your result sheet. Verify the grades. Get your SGPA. Done.
Intelligent semester grade calculator and result parser. Crop a photo of your result sheet, let the browser read it, fix anything it missed, and get your SGPA, all without your data touching a server.
Note
OCR currently uses the OCR.Space API : your cropped image is sent to their server for processing. SGPA calculation, result verification, and report card export still run entirely in your browser. This is a temporary setup while Tesseract.js is being reconfigured for client-side use.
- Crop and scan grade sheet photos using browser-based character recognition
- Edit and verify extracted grades in a dynamic, editable results table
- Calculate SGPA from the verified data
- Export a customized report card image to download or share
- Like button powered by CounterAPI with local duplicate prevention
- OCR pipeline: cropped image is converted to Base64 and sent to OCR.Space API with table detection enabled
- Column mapping: automatically detects subject, credit, and grade columns by scanning headers, supports multiple university result formats
- Grade normalization: corrects common OCR misreads before they reach the calculator (e.g.
8toB,B4toB+,A4toA+) - Credit normalization: handles comma-for-decimal misreads and maps values like
15to1.5 - Cleanup: strips course codes and performance labels like
OutstandingorVery Goodfrom extracted rows - Timeout protection: requests abort after 15 seconds with a retry prompt rather than a silent hang
ReactandVitefor the interfaceOCR.Space APIfor server-side OCR (temporarily replacing Tesseract.js)Framer Motionfor animationsCanvas APIfor report card image generation
- Root Info Button: stands independent from the navbar to prevent unnecessary re-renders
- Like Button: uses
CounterAPIto track total likes with localStorage duplicate prevention - Custom Crop Tool: precise crop selection with responsive touch support
- Unified Likes State: lifted to navbar to synchronize desktop and mobile counters in real time
- Smooth loading paint: deferment timeout lets the browser paint layouts and spin the CSS loader before WebAssembly executes
- Shiny text loop: seamless infinite looping background gradients
- Spring transitions: physics-based springs for layout entry and exit
Clone and install:
git clone https://github.com/anshdhariwal/calci.git
cd calci
npm install
npm run devBuild for production:
npm run buildWarning
OCR requires an API key. Create a .env file in the project root and add:
VITE_OCR_SPACE_KEY=your_key_here
Get a free key at ocr.space/OCRAPI. Without it, scanning will fail with a missing key error.
PRs are welcome. Open an issue first if you're changing something significant.
- Fork the repo
- Create a branch:
git checkout -b feature/thing - Commit:
git commit -m 'feat: add thing' - Push:
git push origin feature/thing - Open a pull request
Crafted by @anshdhariwal and @jigyasaphogat with 💕