The complete abacus & mental arithmetic training platform. Real competitions, live leaderboards, and progress tracking.
Numbers flash at configurable speeds from 3s down to 0.1s — pure mental visualization training.
SPEED TRAININGReal-time leaderboards. Compete with students across India. Daily challenges reset at midnight.
COMPETE LIVETrack accuracy trends, speed improvement, session history, and competition rankings over time.
INSIGHTSReal-time leaderboard — auto-refreshing every 8 seconds
Results auto-sync to Google Sheets via Apps Script webhook. Every submission POSTs: name, class, score, time, accuracy, type, timestamp.
// Code.gs — Deploy as Web App (Execute as: Me, Access: Anyone)
const SHEET_ID = 'YOUR_SHEET_ID_HERE';
function doPost(e) {
const data = JSON.parse(e.postData.contents);
const sheet = SpreadsheetApp.openById(SHEET_ID)
.getSheetByName('Competition');
sheet.appendRow([
new Date(), data.name, data.class, data.score,
data.time, data.accuracy, data.type, data.questions
]);
sheet.getDataRange().sort({column: 4, ascending: false});
return ContentService
.createTextOutput(JSON.stringify({status:'ok',ts:Date.now()}))
.setMimeType(ContentService.MimeType.JSON);
}
function doGet() {
const sheet = SpreadsheetApp.openById(SHEET_ID)
.getSheetByName('Competition');
const rows = sheet.getDataRange().getValues().slice(1).map(r=>({
name:r[1], class:r[2], score:r[3],
time:r[4], accuracy:r[5], type:r[6]
}));
return ContentService
.createTextOutput(JSON.stringify(rows))
.setMimeType(ContentService.MimeType.JSON);
}
Structured curriculum from beginner to competition champion
Click beads to toggle • Upper bead = 5 • Lower beads = 1 each
Each column = place value (ones → millions). Click upper bead for 5; lower beads for 1 each. Value updates automatically.
Manage users, competitions, data, and platform settings
| Name | Class | Competitions | Best Score | Accuracy | Status | Actions |
|---|
| Type | Questions | Time | Participants | Status | Actions |
|---|
Deploy these scripts to automate daily resets, email digests, leaderboard management, and push notifications.
// ── TRIGGER SETUP ──
function setupTriggers() {
ScriptApp.newTrigger('resetDaily')
.timeBased().everyDays(1).atHour(0).create();
ScriptApp.newTrigger('sendDigest')
.timeBased().everyDays(1).atHour(20).create();
}
// ── DAILY RESET ──
function resetDaily() {
const ss = SpreadsheetApp.openById(SHEET_ID);
const s = ss.getSheetByName('Competition');
if (s.getLastRow() > 1)
s.deleteRows(2, s.getLastRow() - 1);
ss.getSheetByName('Log').appendRow([new Date(), 'Daily reset done']);
}
// ── EMAIL DIGEST ──
function sendDigest() {
const data = SpreadsheetApp.openById(SHEET_ID)
.getSheetByName('Competition')
.getDataRange().getValues().slice(1, 4);
let html = '<h2>Today Top Performers</h2>';
data.forEach((r, i) => {
html += `<p>#${i+1}: <b>${r[1]}</b> Score: ${r[3]}</p>`;
});
GmailApp.sendEmail(ADMIN_EMAIL, 'Daily Results', '', {htmlBody: html});
}