Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
0f1bc8b
bypass bot protection to fetch images in ISR
rauchg Oct 19, 2025
13908fd
Migrate Ron's blog posts and update configuration
rmashate Nov 8, 2025
b4f517a
Add remaining blog posts in MDX format
rmashate Nov 8, 2025
7a022dd
Personalize blog configuration and about page for Ron
rmashate Nov 8, 2025
64f1273
Add README and Vercel configuration
rmashate Nov 8, 2025
132f0f7
Fix deployment configuration and layout issues
rmashate Nov 8, 2025
016ccc8
Update Redis to be optional and prepare for Vercel KV
rmashate Nov 8, 2025
8d1d6f4
Update view route to handle optional Redis/KV
rmashate Nov 8, 2025
cbfce25
Update get-posts to handle optional Redis/KV
rmashate Nov 8, 2025
8ddbc82
Add deployment instructions and Vercel KV setup guide
rmashate Nov 8, 2025
e4c17d1
Fix: Remove invalid 'search' property from next.config.js
rmashate Nov 8, 2025
9a99dbb
Fix build: Add ALL missing dependencies (swr, image-size, react-tweet…
rmashate Nov 8, 2025
6601c77
Fix font issue: Replace local Graphik font with Google Inter font
rmashate Nov 8, 2025
0a1ba84
Update README with deployment status and badges - trigger Vercel depl…
rmashate Nov 8, 2025
4cabbd5
Add deployment trigger file - force Vercel rebuild
rmashate Nov 8, 2025
2ba4380
Fix Footer default export
rmashate Nov 8, 2025
67c7b48
Fix Analytics default export
rmashate Nov 8, 2025
f93b489
Fix Posts default export
rmashate Nov 8, 2025
032bb82
Fix unescaped apostrophes in about page
rmashate Nov 8, 2025
0d31486
Fix unescaped apostrophes in chart.tsx
rmashate Nov 8, 2025
599dcbc
Fix unescaped apostrophes in table.tsx
rmashate Nov 8, 2025
bad08c6
Fix Redis null check in tweet component
rmashate Nov 8, 2025
d29603e
Fix: Update package.json with all missing dependencies from rauchg's …
rmashate Nov 8, 2025
69bb997
Fix: Update page.tsx to fetch and pass posts prop correctly
rmashate Nov 8, 2025
abf9bce
Fix: Update layout.tsx with Header/Footer and Geist fonts
rmashate Nov 8, 2025
a15fda1
Add Logo component for site branding
rmashate Nov 8, 2025
88f103c
Update Header with Logo and improved navigation layout
rmashate Nov 8, 2025
179c859
Update About page with Ron's information and simplified styling
rmashate Nov 8, 2025
73165f2
Simplify About page - remove sections and keep clean
rmashate Nov 8, 2025
72e3c9e
Add custom R favicon icon
rmashate Nov 8, 2025
19b6022
Add blog post: The $2M Lesson
rmashate Nov 8, 2025
abf8730
Add blog post: Why AI Keeps Forgetting
rmashate Nov 8, 2025
5b11c67
Add blog post: Cineplex Store Growth
rmashate Nov 8, 2025
cc614e0
Add third blog post: Customer Research Framework
rmashate Nov 8, 2025
8d667a4
Add blog post: Why AI Keeps Forgetting (recreated with correct filename)
rmashate Nov 8, 2025
3046bce
Add blog post: Cineplex Store Growth (recreated with correct filename)
rmashate Nov 8, 2025
0896c46
Fix: Remove duplicate Header from blog post layout
rmashate Nov 8, 2025
a2e9d48
Remove duplicate footer from post layout
rmashate Nov 12, 2025
5e81d49
Merge pull request #2 from rmashate/fix/remove-duplicate-footer
rmashate Nov 12, 2025
b8e68de
Add blog post: When Your AI Has Too Many Tools
rmashate Nov 13, 2025
31e1ab9
Fix: Remove missing image reference to allow deployment to complete
rmashate Nov 13, 2025
bfd6a51
Update When Your AI Has Too Many Tools blog post with complete content
rmashate Nov 13, 2025
844ae54
Fix: Remove duplicate blog post directory causing build conflict
rmashate Jan 4, 2026
c0cb6c6
Move blog post to correct 2025 directory for /2025/when-ai-has-too-ma…
rmashate Jan 4, 2026
88d3cc1
Remove old blog post location to fix duplicate route conflict
rmashate Jan 4, 2026
bc49b23
Improve blog post UX with metadata, navigation, and footer
claude Jan 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
legacy-peer-deps=true
auto-install-peers=true
11 changes: 11 additions & 0 deletions .vercel-deployment.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"lastDeploymentTrigger": "2025-11-08T16:14:00Z",
"triggeredBy": "Manual update to trigger Vercel deployment",
"fixes": [
"Added all missing npm dependencies",
"Fixed font loading issue (switched to Google Inter)",
"Updated README with deployment information"
],
"projectId": "prj_RBudWJDvDGrfqm2xiWpGut2ys4Ti",
"repository": "https://github.com/rmashate/blog"
}
49 changes: 49 additions & 0 deletions DEPLOYMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Blog Deployment Setup

## ✅ Your blog is now ready to deploy!

The Redis dependency has been made optional, so your blog will deploy immediately.

## 📊 Analytics Setup

Your blog already has **Vercel Analytics** configured! Once deployed, you'll see:
- Page views and unique visitors
- Top pages and referrers
- Device and browser breakdown
- Real-time visitor data

View your analytics at: https://vercel.com/dashboard/analytics

## 🔢 View Counter Setup (Optional)

To enable real view counters for individual blog posts, you can add **Vercel KV**:

### Quick Setup (2 minutes):
1. Go to your [Vercel Dashboard](https://vercel.com/dashboard)
2. Select your blog project
3. Click the **Storage** tab
4. Click **Create Database** → Select **KV**
5. Choose the **Hobby** plan (free)
6. Click **Connect to Project**
7. Redeploy your site

That's it! Your view counters will start working automatically.

### How it works:
- Vercel KV is Redis-compatible storage
- Free tier: 3,000 requests/day, 256MB storage
- Auto-configures environment variables (`KV_REST_API_URL` and `KV_REST_API_TOKEN`)
- Your code is already set up to detect and use it

### Current Status:
- ✅ Blog deploys without Redis
- ✅ Vercel Analytics tracking overall traffic
- ⏸️ View counters show mock data (will show real counts once KV is added)

## 🚀 Deployment

Your blog auto-deploys on every push to the main branch via Vercel's GitHub integration.

---

Built by Ron Mashate | Product Leader & AI Experience Builder
84 changes: 84 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# Ron Mashate's Blog

[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Frmashate%2Fblog)
![Deployment Status](https://img.shields.io/badge/Vercel-Deployed-success?logo=vercel&logoColor=white)
![Last Updated](https://img.shields.io/badge/Last%20Updated-Nov%208%2C%202025-blue)

Personal blog built with Next.js 14, MDX, and Tailwind CSS. Featuring product management insights, AI systems development, and lessons from building digital products.

🔗 **Live at:** [https://blog-rmashate.vercel.app](https://blog-rmashate.vercel.app)

## Features

- ✨ Next.js 14 with App Router
- 📝 MDX for rich content authoring
- 🎨 Tailwind CSS for styling
- 📊 Vercel Analytics integration
- 🚀 Optimized for performance
- 🔍 SEO optimized
- 📱 Fully responsive design
- 🎯 View tracking ready (Vercel KV compatible)

## Blog Posts

1. **From $2M to $11M: The Cineplex Store Growth Playbook** - How we transformed a struggling digital platform into a $11M revenue powerhouse
2. **Why AI Keeps Forgetting: Building Better Memory Systems** - Current AI systems have a memory problem. Here's what I learned building a memory system for Claude
3. **The $2M Lesson: Why Customer Research Beats Assumptions Every Time** - How switching from assumption-based to research-driven product development saved Assurance IQ $2M

## Local Development

```bash
# Install dependencies
npm install
# or
pnpm install

# Start development server
npm run dev
# or
pnpm dev

# Build for production
npm run build

# Start production server
npm run start
```

## Adding New Posts

1. Create a new folder in `app/(post)/[year]/your-post-slug/`
2. Add a `page.mdx` file with your content
3. Update `app/posts.json` with post metadata

## Deployment

This blog is deployed on Vercel. Any push to the main branch will trigger a new deployment.

### Deployment Status
- **Project ID:** `prj_RBudWJDvDGrfqm2xiWpGut2ys4Ti`
- **Auto-deploy:** Enabled for main branch
- **Build time:** ~60 seconds

## Tech Stack

- **Framework:** Next.js 14.1.0
- **Content:** MDX 3.0
- **Styling:** Tailwind CSS 3.4
- **Analytics:** Vercel Analytics
- **Font:** Inter (Google Fonts)
- **Deployment:** Vercel

## Connect

- [LinkedIn](https://linkedin.com/in/rmashate)
- [GitHub](https://github.com/rmashate)
- [Email](mailto:rmashate@gmail.com)

## License

MIT License - feel free to use this as a template for your own blog!

---

Built with ❤️ by Ron Mashate | Last updated: November 8, 2025
65 changes: 65 additions & 0 deletions app/(post)/2025/ai-memory-systems-building-better-recall/page.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
export const metadata = {
title: 'Why AI Keeps Forgetting: Building Better Memory Systems',
description: 'Understanding the challenges and solutions for AI memory and context retention',
openGraph: {
title: 'Why AI Keeps Forgetting: Building Better Memory Systems',
description: 'Understanding the challenges and solutions for AI memory and context retention',
}
}

# Why AI Keeps Forgetting: Building Better Memory Systems

<PostMetadata date="2025-02-20" readingTime={3} />

One of the most frustrating aspects of working with AI systems is their tendency to "forget" important context. You're having a productive conversation, and suddenly the AI seems to lose track of what you were discussing.

This isn't a bug—it's a fundamental challenge in how current AI systems work.

## The Problem with Context Windows

Most AI systems, including large language models, have limited "context windows"—the amount of information they can actively consider at once. Think of it like short-term memory in humans.

When you exceed this limit, the AI starts dropping older information to make room for new input. Critical context gets lost, leading to inconsistent or irrelevant responses.

## Why This Matters for Product Design

As a product builder, understanding this limitation is crucial. It affects:

- **Conversation design**: How you structure multi-turn interactions
- **User expectations**: What promises you can realistically make
- **Feature scope**: What capabilities are actually feasible
- **Error handling**: How you gracefully handle context loss

## Solutions I've Implemented

Through building AI-powered products, I've found several approaches that help:

### 1. Explicit Memory Systems

Instead of relying solely on context windows, implement dedicated memory systems that:
- Store key facts and decisions
- Retrieve relevant information when needed
- Maintain continuity across sessions

### 2. Context Compression

Intelligently summarize past interactions to preserve essential information while staying within context limits.

### 3. Hybrid Approaches

Combine AI memory with traditional databases. Use structured data for facts that must persist, and AI for flexible reasoning.

### 4. User Controls

Give users the ability to:
- Mark important information for retention
- Review and edit the AI's "memory"
- Reset context when starting new topics

## The Future

We're seeing exciting developments in AI memory systems, from long-context models to external memory architectures. But for now, designing around current limitations is essential.

**The key insight**: Great AI products don't just use AI—they design around its limitations while playing to its strengths.

<PostFooter />
53 changes: 53 additions & 0 deletions app/(post)/2025/customer-research-beats-assumptions/page.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
export const metadata = {
title: 'The $2M Lesson: Why Customer Research Beats Assumptions Every Time',
description: 'How a failed product launch taught me the importance of customer research',
openGraph: {
title: 'The $2M Lesson: Why Customer Research Beats Assumptions Every Time',
description: 'How a failed product launch taught me the importance of customer research',
}
}

# The $2M Lesson: Why Customer Research Beats Assumptions Every Time

<PostMetadata date="2025-01-15" readingTime={3} />

Early in my career, I learned an expensive lesson about the importance of customer research. We built what we thought was a perfect product, only to discover we had solved the wrong problem.

## The Setup

Our team was excited. We had identified what seemed like an obvious gap in the market. We spent six months building a solution, investing over $2M in development, design, and infrastructure.

The product was beautiful. The code was clean. The features were robust.

There was just one problem: nobody wanted it.

## What Went Wrong

We made the classic mistake of assuming we knew what customers needed without actually asking them. We fell in love with our solution before validating the problem.

When we finally did customer research—after launch—we discovered:

- The problem we solved wasn't actually a pain point for most users
- Our target audience had already found workarounds they were happy with
- The features we thought were essential were seen as unnecessary complexity

## The Lesson

Customer research isn't just a checkbox in your product development process. It's the foundation everything else is built on.

Since then, I've made customer research a non-negotiable part of every product initiative. Before writing a single line of code, we:

1. Talk to at least 20 potential users
2. Observe how they currently solve the problem
3. Validate that the pain point is real and frequent enough to warrant a solution
4. Test concepts before building

## The ROI

This approach has saved us from countless failed initiatives. More importantly, it's helped us build products people actually love and use.

The $2M lesson was expensive, but it fundamentally changed how I approach product development.

**The takeaway**: Your assumptions are not customer insights. Always validate before you build.

<PostFooter />
98 changes: 98 additions & 0 deletions app/(post)/2025/from-2m-to-11m-cineplex-growth/page.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
export const metadata = {
title: 'From $2M to $11M: The Cineplex Store Growth Playbook',
description: 'How we scaled digital revenue 5.5x through product thinking and systematic experimentation',
openGraph: {
title: 'From $2M to $11M: The Cineplex Store Growth Playbook',
description: 'How we scaled digital revenue 5.5x through product thinking and systematic experimentation',
}
}

# From $2M to $11M: The Cineplex Store Growth Playbook

<PostMetadata date="2025-03-10" readingTime={4} />

When I joined Cineplex, the digital store was generating $2M annually. Three years later, we crossed $11M. This is the playbook we used to get there.

## The Starting Point

The Cineplex Store had solid foundations but untapped potential. We had:
- A functional e-commerce platform
- An established brand with built-in trust
- A captive audience of moviegoers
- Limited data on what was actually working

## The Strategy

Rather than big bets, we took a systematic approach to growth:

### 1. Instrument Everything

Before optimizing anything, we needed to understand user behavior. We implemented comprehensive analytics to track:
- Where users were dropping off
- Which features drove purchases
- What content performed best
- How different segments behaved

### 2. Fix the Fundamentals

We identified and fixed basic friction points:
- Simplified the checkout flow (reduced from 5 steps to 3)
- Improved search relevance
- Optimized page load times
- Made the mobile experience actually usable

These "boring" improvements drove a 40% increase in conversion rate.

### 3. Systematic Experimentation

We ran experiments continuously, testing:
- Pricing strategies
- Promotional mechanics
- Content recommendations
- UI improvements

Not every experiment won. Many failed. But the wins more than compensated for the losses.

### 4. Personalization at Scale

We built AI-powered recommendation systems that:
- Suggested relevant content based on viewing history
- Optimized email campaigns for each user
- Dynamically adjusted the homepage based on preferences

This alone drove 25% of incremental revenue.

### 5. Platform Thinking

Instead of just selling digital movies, we thought about the broader ecosystem:
- Integration with the moviegoing experience
- Loyalty program connections
- Cross-platform continuity
- Strategic partnerships

## Key Lessons

**Start with data**: You can't improve what you don't measure.

**Fix fundamentals first**: Optimization beats innovation when the basics aren't working.

**Small bets, fast feedback**: Run many experiments rather than betting everything on one idea.

**Think in systems**: Individual features matter less than how everything works together.

**Focus on user value**: Revenue followed when we solved real problems for users.

## The Numbers

- Revenue: $2M → $11M (5.5x growth)
- Conversion rate: +40%
- Customer satisfaction: +30 NPS points
- Average order value: +25%

## What's Next

The playbook continues to evolve. The principles stay the same: understand users deeply, move fast, measure everything, and always optimize for long-term value over short-term gains.

**The takeaway**: Sustainable growth comes from systematic execution, not one-off wins.

<PostFooter />
6 changes: 3 additions & 3 deletions app/(post)/2025/the-ai-cloud/chart.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ export function Chart() {
const date = new Date(value);
const month = date.toLocaleString("en-US", { month: "short" });
const year = date.getFullYear().toString().slice(-2);
return `${month} '${year}`;
return `${month} &apos;${year}`;
}}
className="text-xs"
tick={{ dy: 10, fill: isDark ? "#737373" : "#666666" }}
Expand Down Expand Up @@ -250,8 +250,8 @@ export function Chart() {
</div>
<p className="text-center mt-4 px-4 font-mono text-xs sm:text-sm text-gray-600 dark:text-gray-400">
<A href="https://ai-sdk.dev">AI SDK</A> is now the #2 largest SDK for AI
in JS/TS, but, crucially, one that's model and provider agnostic
in JS/TS, but, crucially, one that&apos;s model and provider agnostic
</p>
</div>
);
}
}
Loading