INDEX12 ENTRIES

02 / LOG

BLOG

Thoughts, updates, and reflections.

April 19, 2026

Grammario: Where Things Stand

Over the last month I have been working on Grammario more than ever before. Until recently, I saw it more as a passion project spawned out of my own frustrations with mainstream language learning apps than as something I could actually market. However, I realized that if I had these qualms then others could as well. Subsequently, I set out on the path to "finishing" the app.

Today, I am still not finished, but I am getting closer — and a lot closer. I still find myself surrounded and disoriented with so many questions regarding what the final vision is for version 1.0, though I've since settled on a set of features I'd like to share here.

What's in v1.0

Sentence Similarity via Vector Embeddings

After every analysis, Grammario surfaces sentences from your own history that are semantically similar — a "You've seen this before" strip below the main analysis. No other language learning app connects your past encounters with a concept this way. When you analyze a German sentence using accusative case, you might see a sentence from three weeks ago that used the same structure — with a note explaining the link.

A Full Teacher Suite

Still in active development, but already further along than I expected. A teacher account can create classes, add students via a shareable join code, create quizzes, and administer them in a Kahoot-style live session. Teachers can also assign reading passages, create writing prompt assignments with AI feedback, and view error patterns across their class. The goal is to give tutors and classroom instructors the kind of structural insight into their students' grammar that no existing tool provides.

Japanese

A new supported language — still being refined. Japanese brings its own set of challenges and I'm taking the time to get it right before shipping it broadly.

A New "Learn" Section

A full guided grammar curriculum organized by CEFR level — A1 through C2. Topics link directly to the analyzer and to the grammar concept review queue, so there's a coherent loop between reading about a concept, seeing it in a real sentence, and drilling it with spaced repetition.

Features I'm Considering

Beyond the v1.0 feature set, there are a number of ideas I've been thinking about that I believe could meaningfully differentiate Grammario from the Duolingos and LingQs of the world. Nothing is set in stone, but a few I find most compelling:

Sentence Remix

After analyzing a sentence, a panel of AI-generated grammatical variants: change the tense, flip to plural, make it negative, shift formality. Every variant gets its own dependency tree. The goal is to make grammar rules feel like actual rules — not patterns to memorize.

Word Frequency Overlay

Color-coding each word in the dependency tree by how common or rare it is in the language. When you analyze a C1 sentence, you'd see at a glance which words are responsible for the high difficulty score and know exactly where to focus your vocabulary efforts.

Paragraph Mode

Paste an entire paragraph, article excerpt, or dialogue. Grammario would split it into sentences, analyze each one, and render them as a scrollable stack where any sentence can be expanded into its full dependency tree on click. This is the closest thing to what a linguistics professor does when they read a text — seeing the grammar, not just the words.

Personal Grammar Library

As you accumulate analyzed sentences, every grammar concept encountered gets catalogued. The idea is a personal grammar book built from your own sentences — browse your history by concept, see how many times you've encountered the Italian subjunctive, and get a mini lesson synthesized from your own examples. No preset curriculum; shaped entirely by what you've actually studied.

Vocabulary in Context

When you save a word from an analyzed sentence, the flashcard would show not just the word and its translation, but a snapshot of the grammatical structure it came from — reinforcing both meaning and usage pattern at the same time.

A Note on Building Solo

Since I am the sole developer and maintainer of this application, I have learned a lot — I have never before built an app from the ground up, only parts. Every decision from the NLP pipeline to the database to the frontend has been mine to make, which is both freeing and overwhelming in equal measure.

I still have much to do, but I hope I can release it to the world soon!

December 17, 2025

Why I'm Changing Everything: The New Grammario Method

If you've been following Grammario, you know it's been out in the world for a while now. But if I'm being honest, I've been struggling with where to take it next. I knew the vision—helping people truly see how languages work—but I felt like I was hitting a wall with the standard way of doing things.

The "chat with an AI about your grammar" approach just wasn't cutting it. It felt too loose, too prone to "guessing," and it didn't respect the deep, beautiful logic that makes a language like Turkish fundamentally different from Spanish.

I realized that to move forward, I had to stop treating sentences like simple text and start treating them like blueprints. This is why I'm introducing the Structural-First Analysis method. It's the "Aha!" moment Grammario needed, and it's how we're going to actually master these five languages together.

The Problem: The "Black Box" Wall

Most language tech works like a black box. You put a sentence in, the AI "thinks," and it tells you something that sounds right. But there's no map. No proof. When I was trying to figure out how to make Grammario better, I realized we needed a skeleton—a deterministic "Hard Truth" that the AI couldn't hallucinate.

The Solution: The Structural-First Pipeline

We've rebuilt the engine from the ground up. We're moving away from "chatting" and toward visual architecture. Here is how the new Grammario actually looks under the hood:

1. Dissecting the DNA (The Analyst)

We don't guess anymore. We use high-precision computational linguistics to break every sentence into its raw skeleton. We find the root (lemma) of every word and map the grammatical relationships (syntax) using the Universal Dependencies standard. If a word is an object, we know it's an object because the math says so, not because an AI guessed it.

2. Respecting the Family (The Strategist)

I've realized that a "one-size-fits-all" engine is a mistake. To move forward, Grammario now uses a "Divide and Conquer" strategy:

  • For Turkish: We use an "X-Ray" view. Turkish is agglutinative—it stacks meanings like LEGO bricks. Our new method explodes words like evlerinizden into individual segments so you can see the plural, the possessive, and the case markers clearly.
  • For German & Russian: We focus on "Governance." We show you exactly which verb is "demanding" that a noun be in the Dative or Accusative case.
  • For Italian & Spanish: We map "Agreement Clusters," visually grouping the words that have to match in gender and number.
3. The Human Layer (The Tutor)

Only after we have the "Hard Truth" (the structure) do we bring in the AI. Its job is no longer to find the grammar—the engine already did that. Its job is to explain it to you in a way that makes sense. It's the difference between a teacher guessing what's in a book and a teacher having the open book right in front of them.

Moving Forward

I've been struggling to find the right path for Grammario, but this is it. By favoring Structure over Free Text, we're building something that isn't just another study tool—it's a high-definition map for your brain.

Grammar isn't just a set of rules to memorize; it's a structure to be seen. I'm excited to finally show you what that looks like.

October 10, 2025

Grammario Down

Grammario is undergoing some backend changes so the API for sentence analysis is down currently.

September 13, 2025

My Thoughts on Go

In my previous post, I mentioned that I began learning the Go programming language. I am now a couple of weeks into the curriculum and I am thoroughly enjoying it. So, I would like to write a quick blog post about a rather small and maybe insignificant feature that I really enjoy about Go.

Go is a language that has pointers. Pointers are not a new concept to me, my previous experience with C and C++ has drilled pointers into me. However, I found the syntax of pointers in C and C++ to be cumbersome at times. Features such as null pointers for malloc(), dereferencing, and double pointers were annoying and sometimes were a strain to keep track of. So, when I was learning how pointers work in go, I came across this wonderful little feature that eliminates the aforementioned cumbersome syntax. Here is an example:

Lets create a super simple structure for a Bank:

type Bank struct {
  Balance int
}

Now, I want to create a function that takes the Bank structure and adds some amount of money to the balance. So lets write this:

func (b Bank) Deposit(amount int) {
  b.Balance += amount
}

This should work, right? No. Go is a pass-by-value language, meaning that this function does not take the original structure. It creates a copy and then modifies the "new" Balance value untouched. So, in order to modify the one true Balance value in the original structure, we must pass a pointer to the structure.

func (b *Bank) Deposit(amount int) {
  b.Balance += amount
}

Now, this function mutates the original Balance value. The syntax is nice and clean, whereas in C or C++ there would need to be a dereference. That would look something like this:

// this is not real code this is just if Go was like C/C++

func (b *Bank) Deposit(amount int) {
  *b.Balance += amount
}

Turns out, structs in Go are automatically dereferenced. This makes writing functions like this a tiny bit less of a headache. As I said before, it is a small detail, but to me it is extremely enjoyable.

August 31, 2025

New Challenges and New Languages

For my company's debut software Wheelbase, I was recently faced with a challenge. In order to process a lot of data, there was going to be an inevitable need for a fast backend. One of the core features of the application, which populated the database with thousands of entries, was taking up to two minutes to complete. This was unacceptable. Such sluggishness would make the application feel outdated and amateur. After some searching, I found a problem in the backend that was coded in Python using FastAPI. Upon fixing, I managed to make the same process take ~5-25 seconds depending on the amount of cars that were being created in the database (it could be anywhere from 500 to 5,000). Meanwhile, in my spare time I was reading a lot about a programming language that I previously knew pretty much nothing about-Go. Go was supposed to be a language that is a backend heavyweight, capable of sustaining massive backend systems with a syntax that was easy to understand. Since then, I have been spending my time learning Go and investigating how it could be incorporated into Wheelbase's backend.

August 28, 2025

Grammario has a New UI

Over the past couple of months I made the decision to scrap the old UI with the connected cards that could be freely moved around on a gridded canvas. It seemed completely unnecessary for what I was trying to accomplish with the project. I wanted to create a more streamlined and user-friendly interface that would be easier to navigate and use. The new UI is far from perfect, but it is a step in the right direction. The input sentence is displayed at the top and then the if the user clicks on a word, it provides information on said word. Below are some screenshots to show the new UI which can also be seen live at Grammario.ai.

Grammario UI 1Grammario UI 2Grammario UI 3
March 6, 2025

Grammario & YouTube

Due to certain hosting issues, I am unable to deploy the back end of Grammario which is responsible for the grammar breakdown. I am uncertain when this will be fixed as my job and work on Wheelbase take precedent.

On another note, I have decided to make some YouTube videos about the C programming language in my free time. I got this idea after watching some videos by a guy called Daniel Bourke, who has a PyTorch course up on YouTube. In one of his other videos, he claimed that trying to teach something will increase your knowledge in said subject. I believed him. Not knowing what to teach, I came to the idea that I should start from the basics, back to C. Where better to start? C teaches people about the guts of programming in the most intimate way possible that does not involve learning Assembly. Hopefully I will release my first video soon.

C YouTube Video
January 1, 2025

Grammario Update 1/1/25

And with the new year, I present version 0.1.0 of Grammario! It's very bare and is not polished whatsoever, but I do want to show the basic functionality to the world. Once that is tried and tested, then I will move to making the website world class!

December 29, 2024

Grammario Project Update 12/29/24

Utilizing some stuff I learned in the realm of prompt engineering, I was able to improve the prompt and we finally have an output that shows promises!

{
    "sentence": {
        "Ho": {
            "position": 1,
            "part_of_speech": "verb",
            "root": "avere",
            "noun_components": { "affixes": null },
            "noun_case": null,
            "noun_case_components": null,
            "verb_tense": "present perfect",
            "verb_tense_components": [ "ho" ]
        },
        "visto": {
            "position": 2,
            "part_of_speech": "verb",
            "root": "vedere",
            "noun_components": { "affixes": null },
            "noun_case": null,
            "noun_case_components": null,
            "verb_tense": "past participle",
            "verb_tense_components": [ "visto" ]
        },
        "una": {
            "position": 3,
            "part_of_speech": "article",
            "root": null,
            "noun_components": { "affixes": null },
            "noun_case": null,
            "noun_case_components": null,
            "verb_tense": null,
            "verb_tense_components": null
        },
        "bella": {
            "position": 4,
            "part_of_speech": "adjective",
            "root": null,
            "noun_components": { "affixes": null },
            "noun_case": null,
            "noun_case_components": null,
            "verb_tense": null,
            "verb_tense_components": null
        },
        "ragazza": {
            "position": 5,
            "part_of_speech": "noun",
            "root": null,
            "noun_components": { "affixes": null },
            "noun_case": null,
            "noun_case_components": null,
            "verb_tense": null,
            "verb_tense_components": null
        }
    },
    "relationship_matrix": [
        [ 0, 0, 0, 0, 0 ],
        [ 1, 0, 0, 0, 0 ],
        [ 0, 0, 0, 1, 1 ],
        [ 0, 0, 0, 0, 1 ],
        [ 0, 0, 0, 0, 0 ]
    ]
}
Grammario Design DrawingGrammario Design DrawingGrammario Design Drawing
November 1, 2024

Grammario Update 11/1/24

After the last update I have been playing around with prompt engineering in order to get the exact responses necessary to create the desired functionality, but as of right now it has proven fruitless. Sure, I could settle for inconsistent results that "kind of" work and get the basic ideas across but this is not what I want. However, this does not mean I am abandoning the idea of this project-far from it. I will continue to develop my machine learning skills and prompt engineering knowledge until I can create the functionality I so desire. Perhaps I shall even expand the project into a full language learning Web Application, instead of being exclusively to break down grammar. Since I have used every major language application that there is, whether it be Duolingo or LingQ etc.. I believe that I could create a structure that caters more to the enthusiast instead of someone who just keeps learning to keep their Duolingo streak going.

September 19, 2024

Grammario Update – September 19, 2024

In my recent work with Grammario, I've conducted several tests using the OpenAI API to break down grammar in Italian and Turkish, as well as testing with the Stanza library for Turkish grammar breakdowns with my own suffix-extraction logic.

Test 1: OpenAI API - Italian

The first test is a POST request using the OpenAI API to break down an Italian sentence.

{
  "sentence": [
    {
      "part_of_speech": "verb",
      "root": "avere",
      "verb_tense": "present perfect",
      "verb_tense_components": {
        "auxiliary_verb": "ho",
        "past_participle": "L'"
      },
      "word": "L'ho"
    },
    {
      "part_of_speech": "verb",
      "root": "fare",
      "verb_tense": "past participle",
      "verb_tense_components": {
        "past_participle": "fatta"
      },
      "word": "fatta"
    },
    {
      "part_of_speech": "verb",
      "root": "imparare",
      "verb_tense": "infinitive",
      "word": "imparare"
    },
    {
      "part_of_speech": "noun",
      "root": "italiano",
      "noun_components": {
        "stem": "italian",
        "suffixes": "o"
      },
      "word": "italiano"
    }
  ]
}

Test 2: OpenAI API - Turkish

The second test is a POST request using the OpenAI API to break down a Turkish sentence.

{
  "sentence": [
    {
      "part_of_speech": "numeral",
      "root": "bir",
      "noun_components": {
        "stem": "bir"
      },
      "word": "bir"
    },
    {
      "part_of_speech": "noun",
      "root": "elma",
      "noun_case": "nominative",
      "word": "elma"
    },
    {
      "part_of_speech": "verb",
      "root": "yemek",
      "verb_tense": "present continuous",
      "verb_tense_components": "iyor",
      "word": "yiyorum"
    }
  ]
}

Test 3: Stanza Library with Custom Suffix-Extracting Logic (Turkish)

The third test uses the Stanza library for Turkish grammar breakdowns, paired with my own logic for extracting suffixes.

Word: yapilan
Lemma: yap
Features: Aspect=Perf | Mood=Ind | Polarity=Pos | Tense=Pres | VerbForm=Part | Voice=Pass
Extracted Suffixes: ['-an', '-1l']

Word: seçimlere
Lemma: seçim
Features: Case=Dat | Number=Plur | Person=3
Extracted Suffixes: ['-e', '-ler']

Word: Reform
Lemma: reform
Features: Case=Nom | Number=Sing | Person=3
Extracted Suffixes: []

Word: Partisi
Lemma: parti
Features: Case=Nom | Number=Sing | Number[psor]=Sing | Person=3 | Person[psor]=3
Extracted Suffixes: ['-u']

Word: baskan
Lemma: baskan
Features: Case=Nom | Number=Sing | Person=3
Extracted Suffixes: []

Word: aday
Lemma: aday
Features: Case=Nom | Number=Sing | Number[psor]=Sing | Person=3 | Person[psor]=3
Extracted Suffixes: ['-u']

Word: olarak
Lemma: olarak
Features: None
Extracted Suffixes: []

Word: katildi
Lemma: kat
Features: Aspect=Perf | Mood=Ind | Number=Sing | Person=3 | Polarity=Pos | Tense=Past | Voice=Pass
Extracted Suffixes: ['-d1', '-1l']

These tests demonstrate how the different methods approach language grammar breakdowns. While OpenAI offers impressive results for both Italian and Turkish, I've found that the Stanza library combined with custom suffix-extracting logic offers more flexibility for specific language features like Turkish suffixes.

Moving forward, I'll continue refining the custom logic to ensure accuracy and consistency in these breakdowns, with the ultimate goal of building a robust web application that simplifies grammar learning.

September 17, 2024

Grammario Project Background

A core hobby of mine is language learning. Throughout the years I have used many different websites, applications, and tools in order to make learning easier.

Language learning has always been a hobby of mine, but over time, I realized that mastering grammar can often be the most challenging aspect. After scouring the web for tools that could simplify this process, I found that many fell short of providing the depth and clarity needed. Leveraging my knowledge of natural language processing (NLP), I decided to introduce a web app that specifically tackles the complexities of grammar learning, aiming to make this daunting task easier for language learners like myself.

One of the key features of my web app is its ability to break down complex sentences, making grammar easier to understand. For instance, take the Italian sentence: "L'ho fatta parlare in italiano."

  • L': A pronoun meaning "her," used as the direct object.
  • ho: The verb "have," used as an auxiliary in the present tense.
  • fatta: The past participle of "fare" (to make), agreeing with the feminine pronoun.
  • parlare: The infinitive verb meaning "to speak."
  • in: A preposition indicating the language.
  • italiano: A noun meaning "Italian," referring to the language being spoken.

This breakdown simplifies understanding each part of the sentence, showing how the words connect and form the meaning. With this tool, learners can tackle even the most challenging grammatical structures step by step.

END OF LOG