om

photography

kanabar

code
    1. om-kanabar
    2. /
    3. om-kanabar.github.io
    4. /
    5. scripts.js
     68function animatePanels(dominantPanel, shrinkingPanel, duration) {
     69
    animDone = true;
     70
    animDoing = true;
     71
    const startTime = performance.now();
     72
     73
    dominantPanel.style.transition = "none";
     74
    shrinkingPanel.style.transition = "none";
     75
    dominantPanel.style.opacity = "1";
     76
    dominantPanel.style.zIndex = "1";
     77
    shrinkingPanel.style.zIndex = "0";
     78
    dominantPanel.classlist.add("expanded");
     79
     80
    function updateFrame(now) {
     81
    let elapsed = now - startTime;
     82
    let x = Math.min(elapsed / duration, 1);
     83
     84
    let blueY = (8.1 * Math.pow(x, 3)) - (6.8 * Math.pow(x, 2)) + (1.5 * x) + 0.5;
     85
     86
    if (x === 1) blueY = 1;
     87
    let greenY = 1 - blueY;
     88
     89
    dominantPanel.style.width = `${blueY * 100}vw`;
     90
    shrinkingPanel.style.width = `${greenY * 100}vw`;
     91
     92
    shrinkingPanel.style.opacity = greenY * 2;
     93
     94
    if (x < 1) {
     95
    requestAnimationFrame(updateFrame);
     96
    } else {
     97
    shrinkingPanel.style.opacity = "0";
     98
    dominantPanel.style.width = "100vw";
     99
    shrinkingPanel.style.width = "0vw";
    100
    document.body.style.overflow = "auto";
    101
    document.querySelector(."options")style.pointerEvents = "none";
    102
    }
    103
    }
    104
    requestAnimationFrame(updateFrame);
    105}

    v3.0.0-stable

    Portfolio

    An interactive portfolio that highlights both my photography and coding skills. (it's this website) The photography is loaded in with JSON to make my code more DRY. The backgrounds of the code projects are actual code taken from the a project file, and styled with CSS to match my editor.

    View Repository Demo
    1. om-kanabar
    2. /
    3. ks-cnn
    4. /
    5. Scripts
    6. /
    7. train-models.py
    47num_classes = len(mapping)
    48
    49console.print("[bold cyan]Building CNN model...[/bold cyan]")
    50
    51model = keras.models.Sequential([
    52
    keras.layers.Conv2D(32, kernel_size=kernel_size, activation='relu', input_shape=(28,28,1)),
    53
    keras.layers.MaxPooling2D(pool_size=(2,2)),
    54
    keras.layers.Conv2D(64, kernel_size=kernel_size, activation='relu'),
    55
    keras.layers.Conv2D(128, kernel_size=kernel_size, activation='relu'),
    56
    keras.layers.MaxPooling2D(pool_size=(2,2)),
    57
    keras.layers.Flatten(),
    58
    keras.layers.Dense(128, activation='relu'),
    59
    keras.layers.Dense(num_classes, activation='softmax')
    60])
    61
    62model.compile(
    63
    optimizer='adam',
    64
    loss='sparse_categorical_crossentropy',
    65
    metrics=['accuracy']
    66)
    67console.print("[green]Compiling complete.[/green]")
    68
    69
    70unique_id = uuid.uuid().hex[:16]
    71
    72train_images = train_images / 255.0
    73train_images = train_images.reshape(-1, 28, 28, 1)
    74
    75console.print("[bold cyan]Splitting data into training and validation sets...[/bold cyan]")
    76
    77x_train, x_val, y_train, y_val = train_test_split(
    78
    train_images,
    79
    train_labels,
    80
    test_size=0.115,
    81
    random_state=random.randint(1,50)
    82)
    Python

    v1.0-stable

    The Effect of Convolutional Kernel Size on Handwritten Character Recognition Accuracy Using the EMNIST Dataset

    This project was made for CPS Stem Fair. Information about my hypothesis, variables, results, etc. are in my essay linked below.

    View Repository Essay
    1. om-kanabar
    2. /
    3. fintrack
    4. /
    5. js
    6. /
    7. app.js
    180function addRowToTable(expense, parent) {
    181
    const data = expense;
    182
    const tr = document.createElement("tr");
    183
    tr.setAttribute("data-date", data.date);
    184
    let dateObj;
    185
    if (expense.createdAt.toDate) {
    186
    dateObj = expense.createdAt.toDate();
    187
    } else {
    188
    dateObj = expense.createdAt;
    189
    }
    190
    const timestamp = dateObj.getTime();
    191
    tr.setAttribute("data-time", timestamp.toString());
    192
    tr.setAttribute("id", data.id);
    193
    const date = data.date
    194
    ? new Date(data.date + "T00:00:00").toLocaleDateString("en-US")
    195
    : "";
    196
    tr.innerHTML = `
    197
    <th scope="row">${parent.children.length + 1}</th>
    198
    <td>${data.item}</td>
    199
    <td>${data.amount.toFixed(2)}</td>
    200
    <td>date}</td>
    201
    <td>
    202
    <button class="btn btn-sm btn-outline-danger delete-btn" title="Delete expense">
    203
    <i class="bi bi-trash"></i>
    204
    </button>
    205
    </td>
    206
    `;
    207
    parent.appendChild(tr);
    208
    tr.querySelector(".delete-btn").addEventListener("click", async () => {
    209
    if (!confirm("Are you sure you want to delete this expense?")) return;
    210
    await deleteDoc(doc(db, "users", auth.currentUser.uid, "expenses", data.id));
    211
    tr.remove();
    212
    // Update row numbers
    213
    for (let i = 0; i < parent.children.length; i++) {
    214
    parent.children[i].querySelector("th").textContent = i + 1;
    215
    }
    216
    });
    217}
    Firebase

    v0.1.0-alpha

    FinTrack

    FinTrack is a financial tracking website that securly stores your financial expenses per month and will give analytics about them.

    ...
    ...
    ...
    View Repository Demo

About Me

Hi! I'm Om Kanabar. I am 14 years old and love photography, coding, and policy debate. Some of my other interests are philosophy, running, and learning about new things. Feel free to contact me below.

btw, I want to shout out some organizations that I support:

Hack Club
Hack Club
Equality in Forensics
Equality in Forensics
Chicago Debates
Chicago Debates
National Aeronautics and Space Administration
NASA
Mozilla Foundation
Mozilla
World Wildlife Fund
WWF
Block Club Chicago
Block Club Chicago
WBEZ Chicago's NPR news station

Contact Me

Please enter a valid email address.
Please enter your name.
Please enter a subject.
Please enter your message.

Submission blocked due to security policies.

© 2026 Om Kanabar. All rights reserved.

All photographs featured on this website are original works by Om Kanabar and may not be reproduced without permission.

All organization logos and trademarks are the property of their respective owners.