<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marco Loos</title>
    <description>The latest articles on DEV Community by Marco Loos (@marcoloos90).</description>
    <link>https://dev.to/marcoloos90</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4105033%2F9e3d1c49-a8ca-4e3d-849a-da0549f114ba.jpg</url>
      <title>DEV Community: Marco Loos</title>
      <link>https://dev.to/marcoloos90</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcoloos90"/>
    <language>en</language>
    <item>
      <title>What I learned packaging 31 source-code products for sale</title>
      <dc:creator>Marco Loos</dc:creator>
      <pubDate>Tue, 01 Sep 2026 21:32:39 +0000</pubDate>
      <link>https://dev.to/marcoloos90/what-i-learned-packaging-31-source-code-products-for-sale-27j2</link>
      <guid>https://dev.to/marcoloos90/what-i-learned-packaging-31-source-code-products-for-sale-27j2</guid>
      <description>&lt;p&gt;Selling source code is not the same as uploading a repository. A buyer needs to understand what the product does, what is included, how it starts, which services it depends on, and what rights the purchase grants.&lt;/p&gt;

&lt;p&gt;I recently packaged a catalog of 45 digital products: 31 apps/source-code products and 14 ebooks/bundles. The software catalog spans private AI, React Native and Expo, subscriptions, productivity, marketplaces, mobile utilities and games.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five lessons from the packaging work
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Separate the product from the development environment
&lt;/h3&gt;

&lt;p&gt;The deliverable should not depend on private machine paths, local caches or undocumented tools. Buyers need an explicit dependency list and repeatable installation steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Never ship secrets
&lt;/h3&gt;

&lt;p&gt;API keys, tokens, private environment files and production credentials are not product assets. A clean package should include safe placeholders and explain which buyer-owned credentials are required.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Make licensing precise
&lt;/h3&gt;

&lt;p&gt;A download license and a complete IP acquisition are different products. For example, CHAVA Gold 4.0 is available as a €59 source-code license, while its full software/IP acquisition is a separate €19,500 transaction.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Documentation is part of the product
&lt;/h3&gt;

&lt;p&gt;A concise README, architecture overview, installation guide, dependency notes and buyer-handover checklist often determine whether source code is usable after purchase.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Be honest about traction
&lt;/h3&gt;

&lt;p&gt;These listings are newly launched and currently pre-revenue. I would rather give buyers a verifiable technical package than invent revenue claims.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is in the catalog?
&lt;/h2&gt;

&lt;p&gt;Highlights include CHAVA Gold 4.0, the Expo RevenueCat Launch Kit, NEXUS, OC OriginalCheck, Task Flow Pro, MineX, LifeTree and multiple mobile/game products. The book catalog includes ADHD Life Systems, caregiver-support resources and fiction.&lt;/p&gt;

&lt;p&gt;Browse all 45 products: &lt;a href="https://marcomatic06.gumroad.com" rel="noopener noreferrer"&gt;https://marcomatic06.gumroad.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Complete CHAVA software/IP acquisition: &lt;a href="https://vertosmarket.com/project/cmtes8ik2000klrcsufkxhi9z" rel="noopener noreferrer"&gt;https://vertosmarket.com/project/cmtes8ik2000klrcsufkxhi9z&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I am interested in feedback from developers, agencies, distribution partners and technical buyers: what evidence do you require before buying packaged source code?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>reactnative</category>
      <category>ai</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How I structured an Expo + RevenueCat starter that cannot charge in preview mode</title>
      <dc:creator>Marco Loos</dc:creator>
      <pubDate>Tue, 01 Sep 2026 20:12:58 +0000</pubDate>
      <link>https://dev.to/marcoloos90/how-i-structured-an-expo-revenuecat-starter-that-cannot-charge-in-preview-mode-hfp</link>
      <guid>https://dev.to/marcoloos90/how-i-structured-an-expo-revenuecat-starter-that-cannot-charge-in-preview-mode-hfp</guid>
      <description>&lt;p&gt;Subscription UI is easy to mock. Subscription state is where a mobile project usually starts accumulating edge cases.&lt;/p&gt;

&lt;p&gt;For an Expo app, I wanted one small reference implementation that handled the current RevenueCat offering, localized package prices, purchases, cancellation, restores, entitlement state, optional custom user IDs, and customer-info updates without scattering the logic across every screen.&lt;/p&gt;

&lt;p&gt;The key design decision was an explicit preview mode.&lt;/p&gt;

&lt;p&gt;Before public SDK keys and native store products are configured, the app can render the complete paywall and navigate through its interface, but purchase and restore actions remain unavailable. Preview data is clearly separated from live RevenueCat data, so a developer can review the UI without suggesting that a real transaction is possible.&lt;/p&gt;

&lt;p&gt;Once live configuration is present, the service layer initializes RevenueCat with the platform-specific public key, optionally identifies the user, retrieves the current offering, listens for customer-info changes, and maps the configured entitlement into a small app-level state.&lt;/p&gt;

&lt;p&gt;The paywall itself does not need to know how RevenueCat is initialized. It receives packages and state, then calls purchase or restore actions exposed by the subscription layer. That keeps store-specific details out of the UI and makes the failure states easier to explain.&lt;/p&gt;

&lt;p&gt;Before packaging the reference app, I ran a strict TypeScript check, Expo Doctor with 21/21 passing checks, and a clean static web export. The downloadable package also includes a setup guide and a real-device test checklist because a browser preview cannot validate Apple or Google billing.&lt;/p&gt;

&lt;p&gt;I released the complete source as the Expo RevenueCat Launch Kit. This is my paid product, and I am linking it transparently rather than presenting this article as independent coverage:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marcomatic06.gumroad.com/l/expo-revenuecat-launch-kit/LAUNCH25" rel="noopener noreferrer"&gt;https://marcomatic06.gumroad.com/l/expo-revenuecat-launch-kit/LAUNCH25&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The launch link gives the first 10 buyers 25% off for 72 hours. The kit is an independent developer resource and is not affiliated with RevenueCat or Expo.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>mobile</category>
      <category>typescript</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
