JVH Puzzle

My First Experience Building JVH Puzzle

A personal journey into iOS app development, from idea to App Store. The challenges, the lessons learned, and what it's really like to build your first app.

Building my first iOS app was both exciting and challenging. JVH Puzzle started as a simple idea to help puzzle enthusiasts track their Jan van Haasteren puzzle collection, but it quickly became a journey of learning, problem-solving, and growth. In this post, I'll share my experience from the initial concept to launching on the App Store.

The Beginning: From Idea to First Line of Code

It all started with a personal need. As someone who loves Jan van Haasteren puzzles, I found myself struggling to keep track of which puzzles I owned, which ones I wanted, and which ones I had completed. The existing puzzle tracking apps had fundamental problems: they required manual entry, had no comprehensive database, and featured outdated designs. I needed something better.

The initial concept was simple: create an app where users could browse the complete catalog of all 1,008+ Jan van Haasteren puzzles, track their collection, and manage everything in one place. But I quickly realized this needed to be more than just a basic tracker—it needed to be built specifically for JVH fans, with series, artist, and piece count data built-in.

Little did I know how much this simple idea would evolve. What started as a basic collection tracker would eventually become a complete iOS ecosystem with Live Activities, Widgets, Apple Watch support, and even machine learning for puzzle recognition.

Learning iOS Development

Coming from a web development background, iOS development was a whole new world. I had to learn Swift, understand iOS design patterns, and get familiar with Xcode. Here's what I discovered:

Swift: A Modern and Expressive Language

Swift turned out to be a joy to work with. Its syntax is clean, and features like optionals, type safety, and modern concurrency made the code more robust. However, the learning curve was steep, especially understanding concepts like:

  • Optionals and unwrapping
  • Memory management and ARC
  • Protocol-oriented programming
  • SwiftUI vs UIKit

Choosing the Right Framework

I decided to use SwiftUI for the UI, which was both a blessing and a challenge. SwiftUI's declarative syntax is powerful, but as a beginner, debugging layout issues and understanding the view lifecycle took time.

Building the App: The Development Process

The development process was iterative. I started with a basic prototype and gradually added features. Here's how the app evolved:

Version 1: The Foundation

The first version focused on core functionality. I started with a classic split view layout for iPad, making it easy to browse puzzles on the left and see details on the right. The app was directly connected to the JVH database, so users always had the latest puzzle data. I added a basic statistics page where users could track their progress—see how many puzzles they'd completed and how many were still open.

Version 2: Richer Data and Better Experience

With the foundation in place, Version 2 was all about making the app smarter. I focused on parsing even more data from the JVH database—series information, the artist (illustrator), and piece counts. Every puzzle entry became much richer and more informative. I also improved the UI/UX based on my own usage and early feedback.

Beyond Version 2: Building an iOS Ecosystem

But the app didn't stop there. I wanted to create a complete iOS experience that goes beyond just tracking puzzles. This led to some of my favorite features:

  • Live Activities & Dynamic Island: Users can track their puzzle progress directly from the Lock Screen and Dynamic Island, with real-time updates without opening the app. This was built using ActivityKit, and it's one of the features that makes JVH Puzzle feel truly modern.
  • Apple Watch Companion: I built a full Apple Watch app using WatchConnectivity, allowing users to track active puzzles and update progress from their wrist. The watch app syncs seamlessly with the iPhone app.
  • Home Screen Widgets: Using WidgetKit, I created multiple widget sizes that users can add to their Home Screen. They can see their collection stats, completed puzzles, and even an Advent Calendar widget for the holiday season.
  • Following Collections: Users can follow other puzzlers' collections and get real-time notifications when they add new puzzles. This social feature connects the JVH puzzle community.
  • Casting Support: I added AirPlay and Chromecast support, so users can cast puzzle illustrations to their TV while working on puzzles. Perfect for those larger puzzles where you need to see the full image.

Challenges and Solutions

Building an app from scratch came with its fair share of challenges. Here are some of the biggest hurdles I faced and how I overcame them:

Building the Complete Database

One of the first major challenges was creating a comprehensive database of all 1,008+ Jan van Haasteren puzzles. I needed to parse data from the JVH website, extract puzzle information including series, artist (illustrator), piece counts, and images. This is where SwiftSoup came in—a powerful HTML parsing library that allowed me to extract all the puzzle data I needed. Building this database was time-consuming but essential, as it's what makes JVH Puzzle unique: no manual entry required, everything is already there.

Image Loading and Caching

With over 1,000 puzzle images to load, performance was crucial. I implemented smart image caching and lazy loading to ensure smooth scrolling through the catalog. Users can browse hundreds of puzzles without the app slowing down, and images load efficiently even on slower connections.

Barcode Scanning

Implementing barcode scanning was one of my favorite features to build. The idea was simple: scan the barcode on a puzzle box, and the app automatically recognizes and adds it to your collection. But the reality was more complex. I had to handle different barcode formats, deal with poor lighting conditions, and create an intuitive scanning interface. The result? Users can add puzzles to their collection in seconds, just by pointing their phone at the box.

Machine Learning for Puzzle Recognition

One of the most exciting technical challenges was implementing CoreML for puzzle recognition. I trained a machine learning model to recognize Jan van Haasteren puzzles from photos. This allows users to take a picture of a puzzle and have the app identify it automatically. Building and training the model was a learning experience in itself, but it adds a unique touch that makes the app stand out.

Real-time Sync with Firebase

I wanted users to be able to sync their collection across all their devices. Firebase provided the perfect solution for real-time synchronization. Setting up Firebase, handling authentication, and ensuring data consistency across devices was challenging, but the result is seamless—users can access their collection from their iPhone, iPad, and even their Apple Watch, and everything stays in sync.

App Store Submission

Getting the app approved by Apple was a process. I had to:

  • Create app screenshots and descriptions
  • Handle App Store guidelines and requirements
  • Deal with rejection feedback and resubmissions
  • Set up proper app metadata and keywords

Launching to the App Store

The moment of launching was both exciting and nerve-wracking. After months of development, testing, and iterations, seeing the app go live was a milestone. But the real surprise came after launch.

On October 31, 2025, JVH Puzzle reached #1 in the Lifestyle category for iPhone apps. A few months later, on January 10, 2026, it reached #2 for iPad apps in the same category. These achievements were completely unexpected and showed me that there was a real need for this app in the puzzle community.

The launch taught me:

  • The importance of thorough testing before release—especially on different devices and iOS versions
  • How to handle user feedback and bug reports—listening to users made the app so much better
  • The value of a good app description and screenshots—first impressions matter in the App Store
  • That launch is just the beginning, not the end—the app continues to evolve based on user needs

Lessons Learned

Looking back on this journey, here are the key lessons I learned:

Start Simple, Iterate Often

I could have saved time by starting with a minimal viable product and adding features incrementally. Trying to build everything at once was overwhelming.

User Feedback is Invaluable

Early users provided feedback that shaped the app in ways I hadn't considered. Listening to users and implementing their suggestions made the app much better.

Testing is Crucial

Testing on different devices, iOS versions, and scenarios revealed bugs I never would have found otherwise. Comprehensive testing saved me from many embarrassing issues.

Documentation and Code Organization Matter

As the codebase grew, I realized the importance of clean code, proper documentation, and good organization. What seemed like extra work early on saved me time later.

Persistence Pays Off

There were moments when I wanted to give up, especially when facing complex bugs or App Store rejections. But pushing through and solving problems one at a time led to a finished product I'm proud of.

What's Next

Building JVH Puzzle was just the beginning. The experience taught me so much about iOS development, from Swift and SwiftUI to advanced features like ActivityKit, WidgetKit, and CoreML. But more importantly, it taught me about building something that people actually want and use.

The app continues to evolve based on user feedback. Every feature I add, every bug I fix, and every improvement I make comes from understanding what users need. The journey from a simple idea to a #1 App Store app has been incredible, and I'm excited to see where it goes next.

If you're thinking about building your first app, my advice is simple: start. Pick an idea that solves a real problem (even if it's just your own), learn the basics, and build something. You'll make mistakes, face challenges, and learn a lot along the way. But the experience is worth it. Who knows—you might just build something that reaches #1 in the App Store.

For now, JVH Puzzle continues to grow. With over 1,008 puzzles in the database, real-time sync, Live Activities, Apple Watch support, and a growing community of puzzle enthusiasts, it's become more than I ever imagined when I wrote that first line of code.

— Studio Taupe

← Back to blog