{
    "ship": [
        {
            "id": "6a248bc31d998",
            "title": "A1 Tracking",
            "url": "https://a1.asendiausa.com/tracking/"
        },
        {
            "id": "6a248bc31d99c",
            "title": "Free USPS Address Verification & Address Validation Tools",
            "url": "https://www.smarty.com/products/single-address"
        },
        {
            "id": "6a248bc31d995",
            "title": "pirate ship",
            "url": "https://www.pirateship.com/"
        }
    ],
    "Social": [
        {
            "id": "6a248a5fc9678",
            "title": "Facebook",
            "url": "https://www.facebook.com/"
        },
        {
            "id": "6a248bc31d920",
            "title": "Sound Collection",
            "url": "https://www.facebook.com/sound/collection/"
        }
    ],
    "Travel": [
        {
            "id": "6a248bc31d8d2",
            "title": "boondocking guid",
            "url": "http://www.rvhive.com/boondocking-on-us-forest-service-land/"
        },
        {
            "id": "6a248bc31d8cc",
            "title": "Day Hikes Near Denver",
            "url": "https://dayhikesneardenver.com/worth-the-drive/"
        },
        {
            "id": "6a248bc31d8d0",
            "title": "Forest service visitor map",
            "url": "https://www.fs.fed.us/ivm/index.html"
        },
        {
            "id": "6a248bc31d8d4",
            "title": "Free mapping program to help Americans navigate BLM public lands | Bureau of Land Management",
            "url": "https://www.blm.gov/press-release/free-mapping-program-help-americans-navigate-blm-public-lands"
        },
        {
            "id": "6a248bc31d8d1",
            "title": "MVUM boondock",
            "url": "https://www.fs.fed.us/recreation/programs/ohv/ohv_maps.shtml"
        },
        {
            "id": "6a248bc31d8d3",
            "title": "North Coast 500 Itinerary 2020: Comprehensive, Honest + Free",
            "url": "https://www.twoscotsabroad.com/free-north-coast-500-itinerary/?fbclid=IwAR0A0FhTIneHQBRBPTTAZKewGNL8l3Rfk-ziDfGMehZyhq4IQa1xlJs3_nA"
        },
        {
            "id": "6a248bc31d928",
            "title": "Texas Road Trips for the Weekend",
            "url": "http://room5.trivago.com/houston-austin-dallas-texas-road-trips/?cip=01110020100401&cip_tc=TexasRoadTripsCitiesMobile6c"
        }
    ],
    "weather": [
        {
            "id": "6a248bc31d9fc",
            "title": "fischer weather",
            "url": "https://forecast.weather.gov/MapClick.php?w0=t&w1=td&w2=wc&w3=sfcwind&w3u=1&w4=sky&w5=pop&w6=rh&w7=rain&w13u=0&w16u=1&w17u=1&AheadHour=0&Submit=Submit&FcstType=graphical&textField1=29.9627&textField2=-98.2535&site=all&unit=0&dd=&bw="
        },
        {
            "id": "6a248bc31d912",
            "title": "noaa weather history",
            "url": "https://www.ncdc.noaa.gov/cdo-web/datasets/GHCND/stations/GHCND:USS0005K05S/detail"
        }
    ],
    "web tools": [
        {
            "id": "6a248bc31d934",
            "title": "Adobe Express",
            "url": "https://new.express.adobe.com/?url=%2Fexpress%2F&ctaid=marquee&_height=900&_width=1440&_branch_match_id=1209545868171076096&_branch_referrer=H4sIAAAAAAAAA8soKSkottLXT0zJT0otLkgsyi7ILy7RSywo0MvJzMvWd%2FcqcgpwCw13ckqyLy3KsVU1ckutKChKLS4GstSSSxIzU2xzE4sKS1NT1eIzUjPTM0psLQ0M1OLLM1NKMmwNTUwMAKNY8HtjAAAA"
        },
        {
            "id": "6a248bc31d8d8",
            "title": "Blacklisted emails such as icloud, att and me.com | XenForo community",
            "url": "https://xenforo.com/community/threads/blacklisted-emails-such-as-icloud-att-and-me-com.203281/#post-1561716"
        },
        {
            "id": "6a248bc31d8d9",
            "title": "darkroom setup",
            "url": "https://xenforo.com/community/resources/using-custom-user-fields-with-user-group-promotions.4008/"
        },
        {
            "id": "6a248bc31d8db",
            "title": "HTMEditor - Author",
            "url": "https://www.htmeditor.com/author/"
        },
        {
            "id": "6a248bc31d99b",
            "title": "Online Image Vectorizer",
            "url": "https://www.vectorization.org/"
        },
        {
            "id": "6a248bc31d933",
            "title": "pdf resizer",
            "url": "https://pdfresizer.com/crop/a90f13df906f.pdf"
        },
        {
            "id": "6a248bc31d8da",
            "title": "Randomising content | XenForo community",
            "url": "https://xenforo.com/community/threads/randomising-content.185717/"
        },
        {
            "id": "6a248bc31d932",
            "title": "rgb to hex at DuckDuckGo",
            "url": "https://duckduckgo.com/?q=rgb+to+hex&t=osx&ia=answer"
        },
        {
            "id": "6a248bc31d9fa",
            "title": "Studio to SVG Converter",
            "url": "http://www.ideas-r-us-software.uk/FileConverters/SilhouetteStudioConverter.aspx"
        },
        {
            "id": "6a248bc31d937",
            "title": "TypeRip",
            "url": "https://badnoise.net/TypeRip/"
        },
        {
            "id": "6a248bc31d8d7",
            "title": "unix time converter",
            "url": "http://www.onlineconversion.com/unix_time.htm"
        },
        {
            "id": "6a3ad8b1546f7",
            "title": "Speedtest by Ookla - The Global Broadband Speed Test",
            "url": "https://www.speedtest.net/",
            "notes": "",
            "created": "2026-06-23T14:04:17-05:00",
            "modified": "2026-06-23T14:04:17-05:00"
        },
        {
            "id": "6a248bc31d9f0",
            "title": "cPanel Login",
            "url": "https://cp31-ga.privatesystems.net:2083/"
        },
        {
            "id": "6a248bc31d9f3",
            "title": "Dashboard \u2039 High Rock Rides \u2014 WordPress",
            "url": "https://highrockrides.com/wp-admin/"
        },
        {
            "id": "6a248bc31d9f1",
            "title": "DNS Checker - DNS Check Propagation Tool",
            "url": "https://dnschecker.org/#A/covidtruthmatrix.com"
        },
        {
            "id": "6a248bc31d9ee",
            "title": "Manage Domains - Postmaster Tools",
            "url": "https://postmaster.google.com/managedomains?pli=1"
        },
        {
            "id": "6a248bc31d9ef",
            "title": "Running dovecot as a local only IMAP server on OS X \u2013 xdeb.org",
            "url": "https://xdeb.org/post/2014/running-dovecot-as-a-local-only-imap-server-on-os-x/",
            "notes": "",
            "created": "2026-07-06T09:38:52-05:00",
            "modified": "2026-07-06T10:26:48-05:00"
        },
        {
            "id": "6a5581728664e",
            "title": "namecheap",
            "url": "https://ap.www.namecheap.com/",
            "notes": "",
            "created": "2026-07-13T19:23:14-05:00",
            "modified": "2026-07-13T19:23:14-05:00"
        }
    ],
    "accounts": [
        {
            "id": "6a248bc31d91d",
            "title": "Charles Schwab Client Center",
            "url": "https://client.schwab.com/Login/SignOn/CustomerCenterLogin.aspx?ReturnUrl=%2fAccounts%2fSummary%2fSummary.aspx&SessionTimeOut=y"
        },
        {
            "id": "6a248bc31d917",
            "title": "discover",
            "url": "https://www.discovercard.com/cardmembersvcs/loginlogout/app/ac_main"
        },
        {
            "id": "6a248bc31d91a",
            "title": "GE Capital Bank",
            "url": "https://secure.gecapitalbank.com/customerDashboard.do?d6bca427ad5f760f4e1c924cbfc6e621d44bfca0212d2ed58768155e1e3e905fb69404ac6557f36771bd14a31bdc106c93a61fd418f58537079853c9188406ad=9a46ca2312cb8cf1e51388e84866a130"
        },
        {
            "id": "6a248bc31d91e",
            "title": "Gvtc",
            "url": "https://gvtctx.smarthub.coop/Login.html",
            "notes": ""
        },
        {
            "id": "6a2b664918add",
            "title": "Marcus",
            "url": "https://www.marcus.com/us/en",
            "notes": ""
        },
        {
            "id": "6a248bc31d919",
            "title": "RBFCU",
            "url": "https://www.rbfcu.org/NBO/logoff.do"
        },
        {
            "id": "6a248bc31d91f",
            "title": "Relay",
            "url": "https://app.relayfi.com/login?status=logout"
        },
        {
            "id": "6a2b6635309b5",
            "title": "SoFi",
            "url": "https://www.sofi.com/",
            "notes": ""
        },
        {
            "id": "6a5ec190b260a",
            "title": "paypal",
            "url": "https://www.paypal.com/mep/dashboard",
            "notes": "",
            "created": "2026-07-20T19:47:12-05:00",
            "modified": "2026-07-20T19:47:12-05:00"
        },
        {
            "id": "6a67cd7a25149",
            "title": "Buy Me a Coffee",
            "url": "https://studio.buymeacoffee.com/dashboard",
            "notes": "",
            "created": "2026-07-27T16:28:26-05:00",
            "modified": "2026-07-27T16:28:26-05:00"
        }
    ],
    "Food": [
        {
            "id": "6a248bc31d9e0",
            "title": "keto diet",
            "url": "https://www.everydayhealth.com/diet-nutrition/ketogenic-diet/comprehensive-ketogenic-diet-food-list-follow/#samplemenu",
            "notes": "",
            "created": "2026-06-23T20:24:01-05:00",
            "modified": "2026-06-23T20:24:01-05:00"
        },
        {
            "id": "6a401783b3e86",
            "title": "Cunningham Peaches OK/TX Truck Schedule",
            "url": "https://www.cunninghampeaches.com/oktx-truck.html?fbclid=IwY2xjawSs8EtleHRuA2FlbQIxMABicmlkETFKVWdKVUREaEpZRHN5SDZ1c3J0YwZhcHBfaWQQMjIyMDM5MTc4ODIwMDg5MgABHmKVMziVeSaIuPTdBhvYsrMIwtEGqD4iMnfGRf4nqCOidZDHdajkt7g2wxvV_aem_OSkoQ_A3ffvU9IrwbRtcBA",
            "notes": "Saturday, August 1 (7am-1pm or until we sell out)",
            "created": "2026-06-27T13:33:39-05:00",
            "modified": "2026-06-27T13:33:39-05:00"
        },
        {
            "id": "6a4d7561aadc2",
            "title": "Air Fryer Baked Sweet Potato - Skinnytaste",
            "url": "https://www.skinnytaste.com/air-fryer-baked-sweet-potato/",
            "notes": "Air Fryer Baked Sweet Potato\r\n4.95 from 156 votes\r\n0\r\nCals:\r\n146\r\nProtein:\r\n2.5\r\nCarbs:\r\n34\r\nFat:\r\n0.5\r\nFiber:\r\n5\r\nPerfectly baked sweet potatoes cooked in the air fryer in less time than the oven, no pre-heating!\r\nCourse: Dinner, Side Dish\r\nCuisine: American\r\n\r\nPrep: 1minute min\r\nCook: 45minutes mins\r\nTotal: 46minutes mins\r\n Print\r\n Rate\r\n Pin\r\nWW Points\r\nYield: \r\n servings\r\nServing Size: 1 sweet potato\r\n1x\r\n2x\r\n3x\r\nEquipment\r\nAir Fryer (I love this pretty white one from AllCool)\r\n\r\nCook Mode\r\nIngredients\r\n\u25a22 medium sweet potatoes, about 6 ounces\r\n\r\nInstructions\r\nPoke hole all over with a fork and place in the air fryer, no foil needed.\r\n \r\nAir fry 370F 35-45 minutes or until soft.\r\nTop with your favorite toppings!\r\nLast Step: Please leave a rating and comment letting us know how you liked this recipe! This helps our business to thrive and continue providing free, high-quality recipes for you.\r\nNutrition\r\nServing: 1 sweet potato, Calories: 146 kcal, Carbohydrates: 34 g, Protein: 2.5 g, Fat: 0.5 g, Sodium: 93.5 mg, Fiber: 5 g, Sugar: 7 g",
            "created": "2026-07-07T16:53:37-05:00",
            "modified": "2026-07-07T16:53:37-05:00"
        },
        {
            "id": "6a4d7df4f27eb",
            "title": "Easy Oven Baked Trout Recipe",
            "url": "https://www.inspiredtaste.net/1648/oven-baked-trout/",
            "notes": "You Will Need\r\n\r\n2 small rainbow trout, cleaned and butterflied (opened up with the halves still attached), about 1 pound\r\nOlive oil\r\n1 lemon, sliced\r\nFresh herbs, such as parsley, dill, tarragon, and thyme\r\nSalt\r\nFresh ground black pepper\r\nDirections\r\n1Preheat the oven to 400\u00b0F (204\u00b0C). Cut two sheets of heavy-duty aluminum foil larger than your fish, or use parchment paper.\r\n\r\n2Place the trout, skin side down, on each piece of foil. Drizzle both sides with olive oil, then season both sides, inside and out, with salt and pepper.\r\n\r\n3Place two parsley (or dill) sprigs and two lemon slices down the middle of each fish.\r\n\r\n4Fold the foil by grabbing at the edges and crimping it together to make a packet.\r\n\r\n5Place the packets of fish onto the baking sheet.\r\n\r\n\r\n6Bake, checking one packet after 10 minutes. Depending on the size of your fish, it will take 15 to 25 minutes. When ready to come out of the oven, the flesh will be opaque and flake easily with a fork.\r\n\r\n7Place each packet on a plate. Carefully open the foil packets, taking care not to let the steam burn you.\r\n\r\n8Slide the fish away from the packet and onto the plate, pouring the juices over it. Serve with more fresh herbs and lemon slices.\r\n\r\nAdam and Joanne's Tips\r\nParchment paper: If you do not have heavy-duty foil, use two sheets of regular foil to make each packet.\r\nHow to make grilled trout: Follow the directions in the recipe above to make each packet. Heat the grill to medium-high heat. Place the packets over indirect heat. Grill for 10 minutes, check one packet for doneness, and then continue to cook until it is cooked through.\r\nThe nutrition facts provided below are estimates.\r\nNUTRITION PER SERVING Calories 285 / Protein 32 g / Carbohydrate 1 g / Dietary Fiber 0 g / Total Sugars 0 g / Total Fat 16 g / Saturated Fat 4 g / Cholesterol 87 g\r\nAUTHOR: Adam Gallagher",
            "created": "2026-07-07T17:30:12-05:00",
            "modified": "2026-07-07T17:30:12-05:00"
        },
        {
            "id": "6a4d7ec832db2",
            "title": "Perfectly Cooked Rainbow Trout in an Air Fryer: A Complete Guide - AirfryFoods",
            "url": "https://airfryfoods.com/how-to-cook-rainbow-trout-in-air-fryer/",
            "notes": "Cooking Time: Cook the fish at 380\u00b0F for approximately 10-12 minutes. The exact time may vary based on the size and thickness of your fish. It\u2019s essential to check it periodically.",
            "created": "2026-07-07T17:33:44-05:00",
            "modified": "2026-07-07T17:33:44-05:00"
        }
    ],
    "ebay": [
        {
            "id": "6a248bc31d953",
            "title": "active listings",
            "url": "https://www.ebay.com/sh/lst/active"
        },
        {
            "id": "6a248bc31d960",
            "title": "blocked bidders",
            "url": "https://www.ebay.com/bmgt/BuyerBlock?"
        },
        {
            "id": "6a248bc31d962",
            "title": "ebay paid shipped",
            "url": "https://www.ebay.com/sh/ord/?filter=status:PAID_SHIPPED"
        },
        {
            "id": "6a248bc31d961",
            "title": "listings with bids",
            "url": "https://www.ebay.com/sh/lst/active?action=summary&status=BIDS_RESERVE_MET"
        },
        {
            "id": "6a248bc31d956",
            "title": "My eBay: Manage My Store",
            "url": "http://my.ebay.com/ws/eBayISAPI.dll?MyEbay&CurrentPage=MyeBayManageStore&_trksid=p3984.m2295.l4007"
        },
        {
            "id": "6a248bc31d952",
            "title": "Resolution Center - eBay",
            "url": "http://resolutioncenter.ebay.com/"
        },
        {
            "id": "6a3c63273fa84",
            "title": "nobbysparrow | eBay Stores",
            "url": "https://www.ebay.com/str/nobbysparrow",
            "notes": "",
            "created": "2026-06-24T18:07:19-05:00",
            "modified": "2026-06-24T18:07:19-05:00"
        },
        {
            "id": "6a53aa8a698cd",
            "title": "Track and manage your shipments",
            "url": "https://www.ebay.com/ship/labels/seller-hub?query=13-14864-03446",
            "notes": "",
            "created": "2026-07-12T09:54:02-05:00",
            "modified": "2026-07-12T09:54:02-05:00"
        }
    ],
    "Email": [
        {
            "id": "6a248bc31d8d5",
            "title": "EarthLink Mail",
            "url": "https://webmail1.earthlink.net/folders/INBOX",
            "notes": ""
        },
        {
            "id": "6a248a311dcc3",
            "title": "Gmail",
            "url": "https://mail.google.com/mail/u/0/#inbox"
        }
    ],
    "car": [
        {
            "id": "6a248bc31d9ab",
            "title": "911T",
            "url": "http://www.lumpocole.com/doug/1970911t/Previous%20Owner%20Photos.html"
        },
        {
            "id": "6a248bc31d9a7",
            "title": "912 Board",
            "url": "http://www.912bbs.org/"
        },
        {
            "id": "6a248bc31d99f",
            "title": "993",
            "url": "http://forums.rennlist.com/rennforums/forumdisplay.php?s=d0993b11ba14399394a2b1a54f52c51d&forumid=58"
        },
        {
            "id": "6a248bc31d9b0",
            "title": "@FlatSixes - the blog about Porsche -",
            "url": "http://flatsixes.com/"
        },
        {
            "id": "6a248bc31d99e",
            "title": "Andy's Porsche 993 Service & Repair : Stuff I've added to my 993",
            "url": "https://993servicerepair.blogspot.com/2020/08/stuff-ive-added-to-my-993.html"
        },
        {
            "id": "6a248bc31d9ad",
            "title": "Car Racing News: NASCAR, IndyCar, Formula One Breaking News | Autoweek",
            "url": "http://autoweek.com/racing"
        },
        {
            "id": "6a248bc31d9a3",
            "title": "cel",
            "url": "http://forums.rennlist.com/rennforums/showthread.php?t=204599&page=1&pp=15"
        },
        {
            "id": "6a248bc31d9a4",
            "title": "check engine light OBD2 OBD 2 scan tool OBDII",
            "url": "http://www.obd2allinone.com/"
        },
        {
            "id": "6a248bc31d9af",
            "title": "Creaking windscreen. - Rennlist Discussion Forums",
            "url": "http://rennlist.com/forums/993-forum/792487-creaking-windscreen.html"
        },
        {
            "id": "6a248bc31d9aa",
            "title": "Early 911 Porsche 911S, 911T, 911E, 911RS",
            "url": "http://www.early911s.com/"
        },
        {
            "id": "6a248bc31d9a6",
            "title": "Early 911S Registry Bulletin Board - Powered by vBulletin",
            "url": "http://www.early911sregistry.org/forum/index.php"
        },
        {
            "id": "6a248bc31d9a1",
            "title": "Motorsport.com: F1 News, MotoGP, Le Mans Racing, Indycar",
            "url": "http://www.motorsport.com/"
        },
        {
            "id": "6a248bc31d9ac",
            "title": "p-car diy",
            "url": "http://p-car.com/diy/diy.html"
        },
        {
            "id": "6a248bc31d9b1",
            "title": "Prosource Glass International",
            "url": "http://www.prosourceglassintl.com/"
        },
        {
            "id": "6a248bc31d9a2",
            "title": "Racer.com",
            "url": "http://www.racer.com/"
        },
        {
            "id": "6a248bc31d9ae",
            "title": "Select product. - Dr. ColorChip: Automotive Paint Chip Repair Systems",
            "url": "http://www.drcolorchip.com/select-product.php"
        }
    ],
    "Bikes": [
        {
            "id": "6a248bc31d9c6",
            "title": ".pwx to .tcx Converter",
            "url": "http://pwx.raytracer.dk/"
        },
        {
            "id": "6a248bc31d9b7",
            "title": "bettershifting.com",
            "url": "https://bettershifting.com/"
        },
        {
            "id": "6a248bc31d9b9",
            "title": "Bicycle Rolling Resistance | Rolling Resistance Tests",
            "url": "http://www.bicyclerollingresistance.com/"
        },
        {
            "id": "6a248bc31d9bf",
            "title": "bike build 5900",
            "url": "https://docs.google.com/spreadsheets/d/1-_99YNmBqxoDnRNRjsP-Xa-H2bkvHQoHJ26lKGNEqis/edit#gid=0"
        },
        {
            "id": "6a248bc31d9e1",
            "title": "Bike Fitting > Peaks Sports Consulting biomechanical & aerodynamic bike fits",
            "url": "https://peakssportsconsultancy.com/bike-fitting/"
        },
        {
            "id": "6a248bc31d9b8",
            "title": "BikeCalc.com - Bicycle Gear Speed Chart",
            "url": "http://www.bikecalc.com/gear_speed"
        },
        {
            "id": "6a248bc31d9c0",
            "title": "Blog | DC Rainmaker",
            "url": "http://www.dcrainmaker.com/blog"
        },
        {
            "id": "6a248bc31d9d5",
            "title": "convert decimal latitude",
            "url": "http://andrew.hedges.name/experiments/convert_lat_long/"
        },
        {
            "id": "6a248bc31d9dc",
            "title": "Defining Your Phenotype for Power Profile Charts",
            "url": "https://www.velopress.com/defining-your-phenotype-for-power-profile-charts/"
        },
        {
            "id": "6a248bc31d9d9",
            "title": "Exporting Garmin .fit files to Excel .csv files \u2013 Mike Soltys, Ph.D.",
            "url": "http://www.mikesoltys.com/2012/08/19/exporting-garmin-fit-files-to-excel-csv-files/"
        },
        {
            "id": "6a248bc31d9cb",
            "title": "FIT File Tools",
            "url": "https://www.fitfiletools.com/#/top"
        },
        {
            "id": "6a248bc31d9ea",
            "title": "fit file viewer",
            "url": "https://www.fitfileviewer.com/"
        },
        {
            "id": "6a248bc31d9e9",
            "title": "Free FIT File to CSV Converter | Sport Calculator",
            "url": "https://sport-calculator.com/converters/fit-to-csv"
        },
        {
            "id": "6a248bc31d9e5",
            "title": "Free weather forecasts for cyclists",
            "url": "https://mywindsock.com/"
        },
        {
            "id": "6a2d6d4ce5a8f",
            "title": "Garmin Connect",
            "url": "https://sso.garmin.com/portal/sso/en-US/sign-in?clientId=GarminConnect&service=https%3A%2F%2Fconnect.garmin.com%2Fapp%2F",
            "notes": ""
        },
        {
            "id": "6a248bc31d9e3",
            "title": "GoldenCheetah",
            "url": "https://www.goldencheetah.org/#section-tutorials"
        },
        {
            "id": "6a248bc31d9c8",
            "title": "GOTOES free utilities",
            "url": "http://gotoes.org/strava/index.php",
            "notes": ""
        },
        {
            "id": "6a248bc31d9e8",
            "title": "gpx.studio \u2014 about",
            "url": "https://gpx.studio/about.html"
        },
        {
            "id": "6a248bc31d9b3",
            "title": "Gravel Bike Adventures | Elbert Gravel Route (Part 1) in Elbert, Colorado",
            "url": "https://www.gravelbikeadventures.com/route/elbert-gravel-route-part-one"
        },
        {
            "id": "6a248bc31d9b4",
            "title": "HTML5 Gear Calculator",
            "url": "http://www.gear-calculator.com/#KB=34,50&RZ=11,12,13,14,15,17,19,22,25,28&TF=85&UF=2099&SL=2"
        },
        {
            "id": "6a248bc31d9b6",
            "title": "In The Know Cycling | What cycling gear to get next and where to get it",
            "url": "https://intheknowcycling.com/"
        },
        {
            "id": "6a248bc31d9bb",
            "title": "Introduce Yourself / Gallery - Please use metric weights. - Weight Weenies",
            "url": "http://weightweenies.starbike.com/forum/viewforum.php?f=10&sid=8ccc37f934662262ede45e34a2320cf5"
        },
        {
            "id": "6a248bc31d9c7",
            "title": "Lezyne - GPS Root",
            "url": "http://www.lezyne.com/gpsroot/gps_login.php"
        },
        {
            "id": "6a248bc31d9e2",
            "title": "Mizen Head to Malin Head Cycling",
            "url": "https://www.wildatlanticcycling.com/"
        },
        {
            "id": "6a248bc31d9cd",
            "title": "Mobile Walking, Running, Cycle Route Planner - plotaroute.com",
            "url": "https://www.plotaroute.com/mobile/"
        },
        {
            "id": "6a248bc31d9bd",
            "title": "My refinished Trek 5200 - Weight Weenies",
            "url": "http://weightweenies.starbike.com/forum/viewtopic.php?t=124143"
        },
        {
            "id": "6a248bc31d9d6",
            "title": "MyGPSFiles",
            "url": "http://www.mygpsfiles.com/app/"
        },
        {
            "id": "6a248bc31d92f",
            "title": "Page G01 | Cycling Guide | leadvilleherald.com",
            "url": "http://www.leadvilleherald.com/special_editions/cycling_guide/page_ee9557fd-bc4e-5986-8eb2-66a1f73d0692.html"
        },
        {
            "id": "6a248bc31d9db",
            "title": "Rider Search Tool",
            "url": "http://edsresults.com/pacebend19/index.php?search_type=race_results&event=6H-A&race_type=Solo&bike_type=&gender=F&results_per_page=400"
        },
        {
            "id": "6a248bc31d9d1",
            "title": "Robert Jag | Cyclist on Strava",
            "url": "https://www.strava.com/athletes/9293263"
        },
        {
            "id": "6a248bc31d9df",
            "title": "ROUTES | Gran Fondo Scotland",
            "url": "https://www.granfondoscotland.com/routes"
        },
        {
            "id": "6a248bc31d9d2",
            "title": "Strava segments",
            "url": "https://www.doogal.co.uk/strava.php"
        },
        {
            "id": "6a248bc31d9d7",
            "title": "Strava to GPX",
            "url": "javascript:(function()%7Bfunction%20callback()%7B(function(%24)%7Bvar%20jQuery%3D%24%3Bfunction%20callback()%7BgetGpx()%7Dvar%20s%3Ddocument.createElement(%22script%22)%3Bs.src%3D%22https%3A%2F%2Fmapstogpx.com%2Fstrava%2Fmapstogpxstrava.js%22%3Bif(s.addEventListener)%7Bs.addEventListener(%22load%22%2Ccallback%2Cfalse)%7Delse%20if(s.readyState)%7Bs.onreadystatechange%3Dcallback%7Ddocument.body.appendChild(s)%3B%7D)(jQuery.noConflict(true))%7Dvar%20s%3Ddocument.createElement(%22script%22)%3Bs.src%3D%22https%3A%2F%2Fmapstogpx.com%2Fstrava%2Fjquery.min.js%22%3Bif(s.addEventListener)%7Bs.addEventListener(%22load%22%2Ccallback%2Cfalse)%7Delse%20if(s.readyState)%7Bs.onreadystatechange%3Dcallback%7Ddocument.body.appendChild(s)%3B%7D)()"
        },
        {
            "id": "6a248bc31d9ca",
            "title": "Strava-reddit",
            "url": "https://www.reddit.com/r/Strava/"
        },
        {
            "id": "6a248bc31d9e7",
            "title": "Sweet Spot, Threshold and Polarized Training ... By the Numbers \u2013 Xert",
            "url": "http://baronbiosys.com/sweet-spot-threshold-and-polarized-training-by-the-numbers/"
        },
        {
            "id": "6a248bc31d9de",
            "title": "Tales From the Tuscany Trail",
            "url": "https://us.assos.com/shorts-stories/tales-from-the-tuscany-trail"
        },
        {
            "id": "6a248bc31d9c5",
            "title": "TCX-editor",
            "url": "https://tcx-editor.herokuapp.com/"
        },
        {
            "id": "6a248bc31d9dd",
            "title": "The Best Supported Bike Rides in the Country | Outside Online",
            "url": "https://www.outsideonline.com/2344101/best-supported-bike-rides"
        },
        {
            "id": "6a248bc31d9e6",
            "title": "The Cyclist's Guide to Crested Butte and Gunnison | Outside Online",
            "url": "https://www.outsideonline.com/2423682/cyclists-guide-crested-butte-gunnison?utm_source=facebook&utm_campaign=facebookpost&utm_medium=social&fbclid=IwAR2-f8d89CZuH-TVyUPU9mMiAWXgJDGAbTkoT_9QPjEjHOcAGikF0BqNwqQ#close"
        },
        {
            "id": "6a248bc31d9d4",
            "title": "Toolbox For Strava by Marcello Brivio",
            "url": "http://www.marcellobrivio.com/projects/strava-toolbox/"
        },
        {
            "id": "6a248bc31d9d8",
            "title": "Valve Extender How-To - Slowtwitch.com",
            "url": "http://www.slowtwitch.com/Tech/Valve_Extender_How-To_3007.html"
        },
        {
            "id": "6a248bc31d9d3",
            "title": "Velominati \u203a The Rules",
            "url": "http://www.velominati.com/the-rules/"
        },
        {
            "id": "6a248bc31d9d0",
            "title": "Your Segments - VeloViewer",
            "url": "http://veloviewer.com/athlete/9293263/segments?o=0:0&f=0:1%7C1838,5:Ride,10:113.26%7C19191.8,14:-13.1%7C28.4516,17:-100.2%7C171.4&c=0,3,14,7,4"
        },
        {
            "id": "6a248bc31d9c9",
            "title": "Your Year Infographic - VeloViewer",
            "url": "https://veloviewer.com/infographic"
        }
    ],
    "news": [
        {
            "id": "6a248bc31d8e2",
            "title": "Breitbart",
            "url": "http://www.breitbart.com/",
            "notes": "",
            "created": "2026-07-06T09:07:27-05:00",
            "modified": "2026-07-06T11:51:35-05:00"
        },
        {
            "id": "6a2afd1731568",
            "title": "CITIZEN FREE PRESS",
            "url": "https://citizenfreepress.com/",
            "notes": ""
        },
        {
            "id": "6a248bc31d8df",
            "title": "Just The News",
            "url": "https://justthenews.com/"
        },
        {
            "id": "6a248bc31d8e3",
            "title": "Twitchy",
            "url": "http://twitchy.com/"
        },
        {
            "id": "6a248bc31d8de",
            "title": "patriots",
            "url": "https://patriots.win/",
            "notes": ""
        },
        {
            "id": "6a2b6e2e88cc2",
            "title": "HotAir",
            "url": "https://hotair.com/",
            "notes": ""
        },
        {
            "id": "6a2c8adc17312",
            "title": "Gateway Pundit",
            "url": "https://www.thegatewaypundit.com/",
            "notes": ""
        },
        {
            "id": "6a357a571a018",
            "title": "Instapundit",
            "url": "https://instapundit.com/",
            "notes": ""
        },
        {
            "id": "6a4c07afc0c70",
            "title": "x.com",
            "url": "https://x.com",
            "notes": "",
            "created": "2026-07-06T14:53:19-05:00",
            "modified": "2026-07-06T14:53:19-05:00"
        }
    ],
    "Restoration35": [
        {
            "id": "6a248bc31d9f5",
            "title": "Grid - restoration35 | Baserow",
            "url": "https://baserow.io/database/205197/table/495095/896868"
        },
        {
            "id": "6a248bc31d99a",
            "title": "Hanging & Securing Parts for Cerakoting & DuraCoating - Freedom Stencils",
            "url": "https://www.freedomstencils.com/blogs/blog/hanging-securing-parts-cerakote-duracoat"
        },
        {
            "id": "6a248bc31d9f6",
            "title": "restoration-paint - Google Sheets",
            "url": "https://docs.google.com/spreadsheets/d/16iDUAlRU3Fq6ZlfGsxLKZZRiHmzvLv-pOe8bIKiKN4s/edit?pli=1&gid=416211578#gid=416211578"
        },
        {
            "id": "6a25e27a8473e",
            "title": "Restoration35",
            "url": "https://restoration35.com/"
        },
        {
            "id": "6a248bc31d9f4",
            "title": "Restoration35 Instagram",
            "url": "https://www.instagram.com/restoration.35/"
        },
        {
            "id": "6a248bc31d9f7",
            "title": "Sticker Mule",
            "url": "https://www.stickermule.com/account/reorder"
        },
        {
            "id": "6a248bc31d9f8",
            "title": "VistaPrint",
            "url": "https://www.vistaprint.com/oh/"
        },
        {
            "id": "6a248bc31d9f9",
            "title": "B9 NICKEL STRIPPER",
            "url": "https://caswellplating.com/b9-nickel-stripper-5-lb/",
            "notes": ""
        },
        {
            "id": "6a3159c8be175",
            "title": "Google Sheets",
            "url": "https://docs.google.com/spreadsheets/u/1/",
            "notes": ""
        },
        {
            "id": "6a3c88a673119",
            "title": "to do list-cameras.",
            "url": "",
            "notes": "",
            "created": "2026-06-24T20:47:18-05:00",
            "modified": "2026-06-25T14:28:29-05:00"
        },
        {
            "id": "6a4d5ef8d8d1f",
            "title": "camera project receipt",
            "url": "",
            "notes": "Model \r\nSerial\r\nCustomer\r\nWork\r\nDelivered\r\nM2 Rewind type\r\nSelf Timer\r\nPV lever\r\nBody Cap\r\nSpool\r\nASA\r\nBody Vulc\r\nDoor Vulc\r\nArrival Date\r\nCompletion Date",
            "created": "2026-07-07T15:18:00-05:00",
            "modified": "2026-07-07T15:18:00-05:00"
        }
    ],
    "Mac": [
        {
            "id": "6a248bc31d98a",
            "title": "How to Import MBOX to Apple Mail | Stellar KB",
            "url": "https://www.stellarinfo.com/support/kb/index.php/article/import-mbox-to-apple-mail"
        },
        {
            "id": "6a248bc31d914",
            "title": "Navigate your Mac using Full Keyboard Access - Apple Support",
            "url": "https://support.apple.com/guide/mac-help/navigate-your-mac-using-full-keyboard-access-mchlc06d1059/mac"
        },
        {
            "id": "6a248bc31d911",
            "title": "uninstall packages",
            "url": "https://stackoverflow.com/questions/25925752/uninstall-packages-in-mac-os-x"
        }
    ],
    "misc": [
        {
            "id": "6a248bc31d92a",
            "title": "excel online",
            "url": "https://onedrive.live.com/edit.aspx?resid=E7FAB9ECB86250A2!104&app=Excel&wdnd=1&wdPreviousSession=0c9de50a%2D1923%2D4629%2Db2d7%2Da4036836d82b&wdNewAndOpenCt=1509737487654&wdPreviousCorrelation=d951ad0f%2D42c0%2D4d00%2D875d%2D8482f907373e"
        },
        {
            "id": "6a248bc31d926",
            "title": "Welcome to Open Library (Open Library)",
            "url": "https://openlibrary.org/"
        }
    ],
    "Metro": [
        {
            "id": "6a248bc31d99d",
            "title": "Log In \u2039 Metro Case \u2014 WordPress",
            "url": "https://metro-case.com/wp-login.php?loggedout=true&wp_lang=en_US"
        },
        {
            "id": "6a248bc31d996",
            "title": "panashape",
            "url": "https://panashape.bau3d.com/signin/"
        }
    ],
    "health": [
        {
            "id": "6a248bc31da03",
            "title": "Luminate",
            "url": "https://cpl.luminatehealth.com/patient/idv/success"
        }
    ],
    "photo": [
        {
            "id": "6a248bc31d909",
            "title": "35mm ECN-2 Cine Film Processing (Remjet OK!) | Royal We Film Lab",
            "url": "https://www.royalwefilmlab.com/product/35mm-ecn-2-cine-film-processing-remjet-ok-/87?cp=true&sa=false&sbp=false&q=false&category_id=5"
        },
        {
            "id": "6a248bc31d908",
            "title": "Arcticwolf`s Homepage",
            "url": "http://ss-it.de/"
        },
        {
            "id": "6a248bc31d907",
            "title": "awayrepairs \u2014 LiveJournal",
            "url": "https://awayrepairs.livejournal.com/"
        },
        {
            "id": "6a248bc31d8e5",
            "title": "camera exchange latest used film gear",
            "url": "https://camerax.com/product-category/used-photo-gear/used-film-gear/?swoof=1&orderby=date&really_curr_tax=611-product_cat"
        },
        {
            "id": "6a248bc31d8e9",
            "title": "Camera repair pages",
            "url": "http://feuerbacher.de/Mick/photo/repair/KonicaAutoS3/KonicaAutoS3.html"
        },
        {
            "id": "6a248bc31d90f",
            "title": "Camera Service Manuals - High 5 Cameras",
            "url": "https://high5cameras.com/camera-service-manuals/"
        },
        {
            "id": "6a248bc31d90d",
            "title": "Contax 139 Resource",
            "url": "https://www.contax139.co.uk/home"
        },
        {
            "id": "6a248bc31d902",
            "title": "Contax-Yashica-Repairs.co.uk",
            "url": "https://www.contax-yashica-repairs.co.uk/"
        },
        {
            "id": "6a248bc31d8fd",
            "title": "Extension Tube Calculator",
            "url": "https://monochrome.sutic.nu/2018/05/24/extension-tube-calculator.html"
        },
        {
            "id": "6a248bc31d903",
            "title": "Filter Find",
            "url": "https://filterfind.net/Index.html"
        },
        {
            "id": "6a248bc31d8e7",
            "title": "Flickr: Your Photostream",
            "url": "http://www.flickr.com/photos/rjagitsch/"
        },
        {
            "id": "6a248bc31d90e",
            "title": "fred miranda contax",
            "url": "https://www.fredmiranda.com/forum/topic/1853321/1?keyword=reduser,contax#16727064"
        },
        {
            "id": "6a248bc31d90a",
            "title": "Garry's Camera Repair",
            "url": "http://www.garryscamera.com/index.html"
        },
        {
            "id": "6a248bc31d8f2",
            "title": "How to avoid Zeiss/ Sonnar fakes",
            "url": "http://www.klassik-cameras.de/Zeiss_Fakes.html"
        },
        {
            "id": "6a248bc31d8ea",
            "title": "How to edit multiple photos in the Photos app on the Apple Mac | RAW Mac",
            "url": "http://rawinfopages.com/mac/edit-multiple-photos-in-iphoto"
        },
        {
            "id": "6a248bc31d905",
            "title": "https://lenspire.zeiss.com/photo/app/uploads/2022/02/technical-article-how-to-read-mtf-curves-01.pdf",
            "url": "https://lenspire.zeiss.com/photo/app/uploads/2022/02/technical-article-how-to-read-mtf-curves-01.pdf"
        },
        {
            "id": "6a248bc31d906",
            "title": "Nicca Rangefinder Cameras",
            "url": "http://leica-copies-japan.com/Nicca.html"
        },
        {
            "id": "6a248bc31d8fe",
            "title": "Nikomat-ML Home Page",
            "url": "http://nikomat.org/"
        },
        {
            "id": "6a248bc31d8e8",
            "title": "Nikon Lens Versions and Serial Nos",
            "url": "http://www.photosynthesis.co.nz/nikon/serialno.html"
        },
        {
            "id": "6a248bc31d8ff",
            "title": "Olympus Pen F und Halbformate",
            "url": "http://www.klassik-cameras.de/Olympus_PenF.html?fbclid=IwAR25OKRGDadx14kk5DAEvYu9sWJkEkfvFOyDi_nXYhDz-WQDPCilBizi_k4"
        },
        {
            "id": "6a248bc31d8fc",
            "title": "pakon hacks",
            "url": "https://github.com/sgharvey/pakon-tlx-addons?fbclid=IwAR0F2eGqu6cXfeszkLisUUVMXhmjubIUWaZX50zCLYt552S_h7FhGH7wN9k"
        },
        {
            "id": "6a26d18d2fd48",
            "title": "Rangefinderforum",
            "url": "https://rangefinderforum.com/"
        },
        {
            "id": "6a248bc31d8e6",
            "title": "remjet",
            "url": "https://www.reddit.com/r/Darkroom/comments/ub9jcm/testing_ways_to_remove_remjet_on_vision3_film/#:~:text=Recipe%201%3A%20Baking%20Soda%20%2D%20Mix,in%20a%20water%20only%20rinse"
        },
        {
            "id": "6a248bc31d90b",
            "title": "Richard Haw's Classic Nikon Repair and Review | Classic Nikkors Repair and DIY maintenance",
            "url": "https://richardhaw.com/"
        },
        {
            "id": "6a248bc31d8fa",
            "title": "The Olympus Hardware Resource Page",
            "url": "http://olympus.dementix.org/Hardware/"
        },
        {
            "id": "6a248bc31d8fb",
            "title": "Topics - Classic Camera Repair",
            "url": "https://kyp.hauslendale.com/cgi-bin/forum/discus.cgi"
        },
        {
            "id": "6a248bc31d90c",
            "title": "What You Should Know Before Shopping \u2013 Cameractive",
            "url": "https://cameractive.com/pages/welcom-to-cameractive-a-shop-that-sells-rare-and-useful-camera-accessories"
        },
        {
            "id": "6a248bc31d904",
            "title": "Zeiss Historical Products Photography",
            "url": "https://www.zeiss.com/consumer-products/int/service/download-center/historical-products/photography.html"
        },
        {
            "id": "6a2c509ccc94c",
            "title": "Pentax Forums - The Ultimate Resource for Everything Pentax",
            "url": "https://www.pentaxforums.com/",
            "notes": ""
        },
        {
            "id": "6a332bd3041df",
            "title": "Leica CL meter cell",
            "url": "https://www.fredmiranda.com/forum/viewedits.php?mid=17020386",
            "notes": ""
        }
    ],
    "cloud": [
        {
            "id": "6a25dfd42c06e",
            "title": "Air",
            "url": "https://air.inc/"
        },
        {
            "id": "6a2aff5d5806c",
            "title": "box",
            "url": "https://app.box.com/login",
            "notes": ""
        },
        {
            "id": "6a25dfea6e2f8",
            "title": "Dropbox.com",
            "url": "https://www.dropbox.com/"
        },
        {
            "id": "6a248bc31d918",
            "title": "iCloud",
            "url": "https://www.icloud.com/#"
        },
        {
            "id": "6a4e7113a46f0",
            "title": "Photos - Google Photos",
            "url": "https://photos.google.com/",
            "notes": "",
            "created": "2026-07-08T10:47:31-05:00",
            "modified": "2026-07-08T10:47:31-05:00"
        }
    ],
    "library changes": [
        {
            "id": "6a39897349337",
            "title": "a notes for updating library code",
            "url": "",
            "notes": "-delete an entry: should delete and remain in the same category, not refresh the page done\r\n-append function done\r\n-sort categories done \r\n-smart import\r\n-broken link check\r\n-add a button to clear the text in the search window done\r\n-change duplicate bookmarks, to duplicates done\r\n-search for close duplicates done\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 24 Jun 2026 19:19 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\ncollapse/expand all\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 24 Jun 2026 21:39 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n1. Arrow key navigation\r\n    * \u2193 moves through the list.\r\n    * \u2191 moves back.\r\n    * Enter selects.\r\n    * Esc closes.\r\n2. Auto-scroll to the current category\r\n    * If you\u2019re editing an entry in \u201cFood\u201d, clicking \u25bc would open the list with \u201cFood\u201d already visible and highlighted instead of making you hunt through 200 categories.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 25 Jun 2026 14:29 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\noption-click delete to skip dialog box -- done with undo\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 26 Jun 2026 12:46 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nclick on robert's library to refresh the page -done\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 26 Jun 2026 21:54 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nadd category ellipsis for category rename, sort, pin to top, delete empty - done\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 26 Jun 2026 22:07 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nLibrary Design Principles\r\n\r\n\u2022 Clicking an object performs its primary action.\r\n\u2022 Modifier keys accelerate existing actions.\r\n\u2022 Administrative functions are hidden until needed.\r\n\u2022 Search is the primary navigation.\r\n\u2022 Every click should either reveal information or reduce work.\r\n\u2022 Prefer fewer permanent controls over more visible controls.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 26 Jun 2026 22:28 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nGesture\r\n\r\nMeaning\r\n\r\nClick entry\r\n\r\nOpen URL / expand local note\r\n\r\nClick category\r\n\r\nExpand/collapse category\r\n\r\nDouble-click category\r\n\r\nRename\r\n\r\nRight-click category\r\n\r\nMaintenance menu\r\n\r\nOption-click\r\n\r\nFaster version of an existing action\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 27 Jun 2026 18:57 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nThings I\u2019d put on the short list:\r\n\r\n* Long-press category on iOS (same menu as right-click).\r\n* Arrow-key navigation in the category picker.\r\n* Scroll the category picker to the current category when it opens.\r\n* Close all / Expand all categories.\r\n* Option-click category to expand/collapse all (just an idea).\r\n* Undo for rename and sort (using the same one-level undo philosophy).\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 27 Jun 2026 19:05 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\n* Split the JavaScript into modules (search.js, category-menu.js, entries.js, undo.js, etc.). It\u2019s reached the point where that will pay dividends.\r\n* Add a tiny CHANGELOG.md. Even if you\u2019re the only developer, you\u2019ll thank yourself six months from now.\r\n* Start a ROADMAP.md with exactly the ideas you\u2019ve been mentioning. It\u2019s much easier to finish polishing when you know future ideas are safely written down.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 27 Jun 2026 19:10 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nvoice notes\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 27 Jun 2026 19:26 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nLibrary UI Principles\r\n\r\n* The interface should be as minimal as possible.\r\n* The primary action should always be one click/tap.\r\n* Secondary actions belong in context menus.\r\n* Power-user shortcuts (Option-click, right-click, etc.) should never be required but should make frequent tasks faster.\r\n* Don\u2019t interrupt the user with confirmation dialogs when Undo is available.\r\n* Everything should feel equally natural on desktop and mobile.\r\n* Prefer revealing functionality over displaying buttons.\r\n* Preserve context after every action (return to the edited/appended/restored entry).\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 27 Jun 2026 19:33 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\npin/unpin category depending on status\r\n\r\nremove entry icons: right click (long press) for append, edit, delete, favorite (unfavorite)\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 27 Jun 2026 19:37 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\ncollapse all: right click on title or add to ellipsis.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 28 Jun 2026 12:30 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nwhen a new entry is added, and moved into a category, show the new entry (flash yellow)\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 28 Jun 2026 12:48 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nNext time\r\n\r\nThe things I\u2019d have at the top of the list are:\r\n\r\n* Replace the entry action icons with a context menu (desktop right-click, iOS long-press).\r\n* Add \u201cRemove Favorite\u201d and \u201cUnpin\u201d when appropriate.\r\n* Make the Organize dialog jump to the moved entry after reload.\r\n* Eventually replace the prompt() for new category with an inline text field.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 29 Jun 2026 20:52 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nappend\n\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 06 Jul 2026 10:47 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nImport Testing\r\n\r\n* \u2610 Import a small Safari bookmarks HTML file (5\u201310 bookmarks).\r\n* \u2610 Verify the selected category is created if it doesn\u2019t exist.\r\n* \u2610 Verify import into an existing category.\r\n* \u2610 Verify category name matching is case-insensitive (news vs News).\r\n* \u2610 Verify bookmark titles and URLs import correctly.\r\n* \u2610 Verify Created and Modified timestamps are present (after you add them).\r\n* \u2610 Verify imported entries appear in search.\r\n* \u2610 Verify imported entries can be Edit / Append / Move / Favorite / Delete.\r\n* \u2610 Verify an invalid file produces a sensible error.\r\n* \u2610 Verify importing the same file twice (duplicates are expected for now).\r\n\r\nI wouldn\u2019t worry about duplicate detection yet\u2014that can be a future enhancement.\r\n\r\nOne thing I would add to your longer-term wish list is smarter importing. Instead of importing everything blindly, it could say something like:\r\n\r\nImport complete.\r\n\r\n* 327 bookmarks imported\r\n* 12 duplicates skipped\r\n* 3 invalid URLs skipped\r\n\r\nThat would make importing thousands of bookmarks much nicer.\r\n\r\nI also like that your import is intentionally simple. It doesn\u2019t try to recreate Safari\u2019s folder hierarchy; it lets the user decide the destination category. That fits the philosophy of your library, where categories are meant to be broad buckets and the search is the primary way of finding things.",
            "created": "2026-06-22T14:13:55-05:00",
            "modified": "2026-07-06T10:47:59-05:00"
        }
    ],
    "Favorites": [
        {
            "id": "6a505ac85b948",
            "title": "camera exchange latest used film gear",
            "url": "https://camerax.com/product-category/used-photo-gear/used-film-gear/?swoof=1&orderby=date&really_curr_tax=611-product_cat",
            "original_id": "6a248bc31d8e5"
        },
        {
            "id": "6a2afe6cf11fd",
            "title": "CITIZEN FREE PRESS",
            "url": "https://citizenfreepress.com/",
            "notes": "",
            "original_id": "6a2afd1731568",
            "modified": "2026-07-09T14:08:19-05:00"
        }
    ],
    "google": [
        {
            "id": "6a248bc31d943",
            "title": "Google Analytics Official Website - Web Analytics & Reporting \u2013 Google Analytics",
            "url": "http://www.google.com/analytics/"
        },
        {
            "id": "6a248bc31d924",
            "title": "Google Translate",
            "url": "http://translate.google.com/translate?sl=es&tl=en&js=n&prev=_t&hl=en&ie=UTF-8&layout=2&eotf=1&u=http%3A%2F%2Fwww.dslrmagazine.com%2Fdigital%2Fcamaras-de-telemetro-y-especiales%2Fx-pro1-la-prueba-opticas.html"
        },
        {
            "id": "6a248bc31d942",
            "title": "Home: Google AdSense",
            "url": "https://www.google.com/adsense/app#home"
        }
    ],
    "Leica": [
        {
            "id": "6a248bc31d8f8",
            "title": "(114) Leica IIIF CLA and repair - YouTube",
            "url": "https://www.youtube.com/watch?v=gTb94H0AGng"
        },
        {
            "id": "6a248bc31d8ef",
            "title": "L39SM CAMBASE - Leica/Reid Cameras Database!",
            "url": "http://www.l39sm.co.uk/about_leica.php"
        },
        {
            "id": "6a248bc31d8f7",
            "title": "Leica Downloads - Books, Brochures and Price Lists",
            "url": "https://www.apotelyt.com/photo-download/leica-literature"
        },
        {
            "id": "6a248bc31d8f5",
            "title": "leica lens serial numbers and years",
            "url": "http://www.l-camera-forum.com/leica-wiki.en/index.php/Serial_Number_Links_for_Leica_Cameras_and_Lenses"
        },
        {
            "id": "6a248bc31d8ec",
            "title": "Leica Screw Mount Serial #'s Sorted by Number",
            "url": "http://cameraquest.com/ltmnum.htm"
        },
        {
            "id": "6a248bc31d8ed",
            "title": "Leica Serial Numbers: M's Sorted by Type",
            "url": "http://cameraquest.com/mtype.htm"
        },
        {
            "id": "6a248bc31d8f0",
            "title": "Leica Wiki (English)",
            "url": "http://www.l-camera-forum.com/leica-wiki.en/index.php/Main_Page#Screw-thread_Bodies",
            "notes": "",
            "created": "2026-06-24T14:31:06-05:00",
            "modified": "2026-06-24T14:33:02-05:00"
        }
    ],
    "youtube": [
        {
            "id": "6a4c1fb50768b",
            "title": "links",
            "url": "",
            "notes": "loctie https://amzn.to/4f5CX2s\r\n\r\ntpu tube https://amzn.to/4ycuJyk\n\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 08 Jul 2026 08:35 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nhttps://amzn.to/44QYvLn -- magnets",
            "created": "2026-07-06T16:35:49-05:00",
            "modified": "2026-07-08T08:35:44-05:00"
        },
        {
            "id": "6a4eaeecea981",
            "title": "Channel content - YouTube Studio",
            "url": "https://studio.youtube.com/channel/UClHbYX8v73_R-_1H2tBf-UQ/videos/upload?filter=%5B%5D&sort=%7B%22columnType%22%3A%22date%22%2C%22sortOrder%22%3A%22DESCENDING%22%7D",
            "notes": "",
            "created": "2026-07-08T15:11:24-05:00",
            "modified": "2026-07-08T15:11:24-05:00"
        }
    ],
    "camera projects": [
        {
            "id": "6a4d5f34ac634",
            "title": "M3 800050 - Igor",
            "url": "",
            "notes": "Model M3 DS\r\nSerial 800050\r\nCustomer Igor\r\nWork factory black\r\nDelivered\r\nM2 Rewind type -\r\nSelf Timer y\r\nPV lever y\r\nBody Cap y\r\nSpool y\r\nASA 200\r\nBody Vulc new\r\nDoor Vulc new \r\nArrival Date 7/7/26\r\nCompletion Date",
            "created": "2026-07-07T15:19:00-05:00",
            "modified": "2026-07-07T15:20:03-05:00"
        },
        {
            "id": "6a511a7e3b984",
            "title": "Nicca type 5",
            "url": "",
            "notes": "Nicca Type 5\t126605\tRobert\tblack paint, cla\t\t-",
            "created": "2026-07-10T11:14:54-05:00",
            "modified": "2026-07-10T11:14:54-05:00"
        },
        {
            "id": "6a511a890c177",
            "title": "Leica IIIc\t513103",
            "url": "",
            "notes": "Leica IIIc\t505484\tRobert\tblack paint top bottom (charlie), rest chrome, cla, repainted (erik) to fix top plate flaws. switched top plates with #513103\t\t-\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nLeica IIIc\t513103\t\tblack paint top\t\t-",
            "created": "2026-07-10T11:15:05-05:00",
            "modified": "2026-07-10T11:15:05-05:00"
        },
        {
            "id": "6a511aa2294b6",
            "title": "Leica 1F",
            "url": "",
            "notes": "If\t579816\tRobert\t\t\t-\t\t\t\t\t\t\t\t\t6/22/26",
            "created": "2026-07-10T11:15:30-05:00",
            "modified": "2026-07-10T11:15:30-05:00"
        },
        {
            "id": "6a511ab6800a7",
            "title": "Tower/Nicca",
            "url": "",
            "notes": "Tower \t74323\tXavier Hanson\tmetal body cap, spool\t\t-\t-\t-\tyes\tyes\t-\torig\t-\t5/9/25",
            "created": "2026-07-10T11:15:50-05:00",
            "modified": "2026-07-14T20:20:27-05:00",
            "archived_at": "2026-07-14T20:20:27-05:00"
        },
        {
            "id": "6a511ac97aa7b",
            "title": "Leica IIIf",
            "url": "",
            "notes": "IIIf BD\t591968\tRJ\tfrom precision needs beamsplitter and curtains 200 - sent to jiang",
            "created": "2026-07-10T11:16:09-05:00",
            "modified": "2026-07-10T11:16:09-05:00"
        },
        {
            "id": "6a511adbe5cd6",
            "title": "Leica M2\t960770 Aziz",
            "url": "",
            "notes": "Leica M2\t960770\tAziz\tfactory black\t1/16/26\tbutt\tno\tyes\tyes\tyes\t1000\treeplaced\treplaced\t1/16/26",
            "created": "2026-07-10T11:16:27-05:00",
            "modified": "2026-07-20T16:48:04-05:00",
            "archived_at": "2026-07-20T16:48:04-05:00"
        },
        {
            "id": "6a511aed0ade0",
            "title": "Leica M2\t1036789 Robert",
            "url": "",
            "notes": "Leica M2\t1036789\trobert\tbody cap strap rewind crank from mpb 750 no tax\t\tlever\tno\tyes\tyes\tyes\t1300\torig\torig\t2/14/26",
            "created": "2026-07-10T11:16:45-05:00",
            "modified": "2026-07-10T11:16:45-05:00"
        },
        {
            "id": "6a511afb8ddc8",
            "title": "Leica M2\t1049780\trobert",
            "url": "",
            "notes": "Leica M2\t1049780\trobert\tbody cap from mpb 950 w tax\t\tlever\tyes\tyes\tyes\tyes\t1300\torig\torig\t11/28/25",
            "created": "2026-07-10T11:16:59-05:00",
            "modified": "2026-07-10T11:16:59-05:00"
        },
        {
            "id": "6a511b092246d",
            "title": "Leica M3\t1003727 RJ",
            "url": "",
            "notes": "Leica M3\t1003727\trobert\tbody cap from mpb 1089\t\t\tyes\tyes\tyes\tyes\t1300\torig\torig\t1/30/26",
            "created": "2026-07-10T11:17:13-05:00",
            "modified": "2026-07-10T11:17:37-05:00"
        },
        {
            "id": "6a511b16d126e",
            "title": "leica M3\t1047290 RJ",
            "url": "",
            "notes": "leica M3\t1047290\trobert\tfrom camera exchange 200\t\t\tyes\tyes\tno\tno\t1300\torig\torig\t12/08/25",
            "created": "2026-07-10T11:17:26-05:00",
            "modified": "2026-07-10T11:17:26-05:00"
        },
        {
            "id": "6a511b3726a3c",
            "title": "Leica IIIc\t385485 RJ",
            "url": "",
            "notes": "Leica IIIc\t385485\tRJ\tbought from Al Feit. no body cap. CLA by Cheol.\t\t-\t-\t-\t-\tyes\t-\tnon orig\t-\t4/24/26",
            "created": "2026-07-10T11:17:59-05:00",
            "modified": "2026-07-10T11:17:59-05:00"
        },
        {
            "id": "6a511b4d87937",
            "title": "Leica M7\t2724933\tDave Keenan",
            "url": "",
            "notes": "M7\t2724933\tDave Keenan\tparts only\t1/29/26\t-\t-\tyes\tyes\t-\t-\tnon orig\tnon orig\t11/26/25\t1/29/26",
            "created": "2026-07-10T11:18:21-05:00",
            "modified": "2026-07-10T11:18:21-05:00"
        },
        {
            "id": "6a511b623c4aa",
            "title": "Canon P\t721329 Jeff",
            "url": "",
            "notes": "Canon P\t721329\tJeff Bennett\tbody cap\t\t-\t-\t-\t-\t-\t-\t-\t-\t4/29/26",
            "created": "2026-07-10T11:18:42-05:00",
            "modified": "2026-07-14T20:20:31-05:00",
            "archived_at": "2026-07-14T20:20:31-05:00"
        },
        {
            "id": "6a511b72535f5",
            "title": "Leica IIIg\t870775 Keyi",
            "url": "",
            "notes": "IIIg\t870775\tKeyi Wu\tWith Leicavit\t\t-\t-\t-\t-\tyes\t-\torig\t-\t5/5/26",
            "created": "2026-07-10T11:18:58-05:00",
            "modified": "2026-07-10T11:18:58-05:00"
        },
        {
            "id": "6a511b72609fc",
            "title": "Leica IIIg\t870775 Keyi",
            "url": "",
            "notes": "IIIg\t870775\tKeyi Wu\tWith Leicavit\t\t-\t-\t-\t-\tyes\t-\torig\t-\t5/5/26",
            "created": "2026-07-10T11:18:58-05:00",
            "modified": "2026-07-10T11:18:58-05:00"
        },
        {
            "id": "6a511b83466a0",
            "title": "Lens hood Miles",
            "url": "",
            "notes": "lens hood\t-\tmiles libak\t3.5cm summaron elmar\t\t-\t-\t-\t-\t-\t-\t-\t-\t5/2/26",
            "created": "2026-07-10T11:19:15-05:00",
            "modified": "2026-07-14T20:20:23-05:00",
            "archived_at": "2026-07-14T20:20:23-05:00"
        },
        {
            "id": "6a511b901e537",
            "title": "Leica CL\t1024266 RJ",
            "url": "",
            "notes": "Leica CL\t1024266\t\t$234 from MPB\t\t-\t-\t-\ty\t-\t-\t-\t-\t5/11/26",
            "created": "2026-07-10T11:19:28-05:00",
            "modified": "2026-07-10T11:19:28-05:00"
        },
        {
            "id": "6a511b9db48a0",
            "title": "Contax IIa\tA45635",
            "url": "",
            "notes": "Contax IIa\tA45635\t\t$99 with lens from camera exchange. needs leather. speeds seem good. B works.T works",
            "created": "2026-07-10T11:19:41-05:00",
            "modified": "2026-07-10T11:19:41-05:00"
        },
        {
            "id": "6a511ba92332e",
            "title": "Contax IIa\tA512225",
            "url": "",
            "notes": "Contax IIa\tA512225\t\tfrom RFF with 50/1.5 Jena 3089266",
            "created": "2026-07-10T11:19:53-05:00",
            "modified": "2026-07-10T11:19:53-05:00"
        },
        {
            "id": "6a511bb4638ce",
            "title": "Contax IIa\tL85405",
            "url": "",
            "notes": "Contax IIa\tL85405\t\tCLA Cheol. from miles, $75. B and T",
            "created": "2026-07-10T11:20:04-05:00",
            "modified": "2026-07-10T11:20:04-05:00"
        },
        {
            "id": "6a511bbe9e208",
            "title": "M2 top\t983494",
            "url": "",
            "notes": "M2 top\t983494\tBill Blackwell\tgraphite black, remove engraving\t\t-\t-\t-\t-\t-\t-\t-\t-\t6/25/26",
            "created": "2026-07-10T11:20:14-05:00",
            "modified": "2026-07-10T11:20:14-05:00"
        }
    ],
    "General": [
        {
            "id": "6a556ae9c2f8a",
            "title": "Tanning Bed Member/no charge - SUNFREE TANS",
            "url": "https://sunfree-tans-wimberley.cloveronline.com/services/tanning-bed-memberno-charge-BNRJ299BMSC54",
            "notes": "",
            "created": "2026-07-13T17:47:05-05:00",
            "modified": "2026-07-13T17:47:05-05:00"
        },
        {
            "id": "6a5a410e02d6c",
            "title": "tan salon",
            "url": "https://sunfree-tans-wimberley.cloveronline.com/",
            "notes": "",
            "created": "2026-07-17T09:49:50-05:00",
            "modified": "2026-07-17T09:49:50-05:00"
        }
    ],
    "zenya": [
        {
            "id": "6a566d1e31adb",
            "title": "zenya development",
            "url": "",
            "notes": "1. Never calculate what Strava already calculates.\r\n2. Never duplicate a feature unless Zenya can make it meaningfully better or easier.\r\n3. Present information; don\u2019t invent conclusions.\r\n4. Maps first. Geography is the primary UI.\r\n5. Respect Strava\u2019s subscription boundaries. If data isn\u2019t available to the user\u2019s account, Zenya doesn\u2019t try to bypass that.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 14 Jul 2026 14:43 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nHere\u2019s what I\u2019d consider our conclusions from today:\r\n\r\nProduct Philosophy\r\n\r\n* Reimagine existing Strava data rather than recreate it.\r\n* Zenya is a Strava companion, not a Strava replacement.\r\n* Respect Strava\u2019s subscription boundaries.\r\n\r\nTechnical Direction\r\n\r\n* Use Strava\u2019s JSON/React data whenever available.\r\n* Download the original FIT only when actually saving a modified activity.\r\n* Keep Google Drive optional instead of required.\r\n\r\nEditor\r\n\r\n* One editing operation: Remove Section.\r\n* Endpoint cropping becomes just a special case of section removal.\r\n* Keep the synchronized:\r\n    * Map\r\n    * Timeline\r\n    * Graphs\r\n    * Green position dot\r\n    * Inspector\r\n* Graphs are navigation/editing tools, not analytics.\r\n\r\nUI Philosophy\r\n\r\n* Engineer internally.\r\n* Cyclist externally.\r\n* Hide implementation details like FIT files and point indices.\r\n\r\nFeature Direction\r\n\r\n* Merge Activities\r\n* Remove Section\r\n* Auto Kudos\r\n* Global ride maps\r\n* KOM/Top-percentile explorer\r\n* Better visualizations of Strava data rather than duplicate analytics.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 14 Jul 2026 16:34 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nThere\u2019s a big difference between software that\u2019s trying to behave like a considerate user and software that\u2019s trying to maximize throughput.\r\n\r\nFor example, your current Kudos implementation already reflects that mindset:\r\n\r\n* It works through the feed sequentially.\r\n* It waits between actions instead of firing requests in parallel.\r\n* It skips activities that have already been kudoed.\r\n* It doesn\u2019t continuously poll Strava.\r\n* It stops when it reaches the configured age limit.\r\n* It doesn\u2019t try to \u201ccatch up\u201d months of activities in one run.\r\n\r\nThat\u2019s a very different pattern from a bot that tries to process thousands of actions as quickly as possible.\r\n\r\nFor Zenya in general, I\u2019d keep a few guiding principles:\r\n\r\n* User initiated. Zenya only acts after the user clicks the bookmarklet and chooses a tool.\r\n* Use what the browser already has. Don\u2019t fetch data unless there\u2019s a compelling reason.\r\n* No unnecessary requests. If the page already contains the information, don\u2019t ask Strava for it again.\r\n* Human pace. If an action normally takes a human a second or two, don\u2019t compress it into milliseconds.\r\n* One user, one session. Zenya shouldn\u2019t pretend to be multiple clients or open multiple concurrent sessions.\r\n* Transparent. The user should always know what Zenya is doing and be able to stop it.\r\n\r\nI also like the fact that the bookmarklet is explicitly user-driven. The user is already on Strava, looking at their own activities, and they choose to invoke Zenya. That\u2019s quite different from software running continuously in the background or harvesting data when the user isn\u2019t interacting with it.\r\n\r\nOne thing I\u2019d suggest as we continue designing is to adopt what I\u2019ll call the \u201cleast surprise\u201d principle:\r\n\r\nIf a user could reasonably perform the same sequence of actions manually, Zenya should simply make those actions more convenient\u2014not fundamentally different.\r\n\r\nFor example:\r\n\r\n* Auto Kudos = clicking Kudos repeatedly, but without the repetitive manual effort.\r\n* Route Crop = editing data the user is already viewing.\r\n* GPX Export = exporting information from the activity the user already opened.\r\n\r\nThat philosophy will naturally keep Zenya focused on being a productivity tool rather than an automation engine. It also aligns well with the architecture we\u2019ve been evolving: a lightweight enhancement layer that helps users work with their own Strava sessions, using data that\u2019s already been presented to them.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 14 Jul 2026 19:03 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nFeatures get users. Brands keep them.\r\n\r\nAuto Kudos may be the feature that convinces someone to install Zenya.\r\n\r\nBut it won\u2019t be why they stay.\r\n\r\nThey\u2019ll stay because every time they click that bookmarklet, Zenya delivers another thoughtful, polished experience that makes them feel like someone really cared about the details. If we hold ourselves to that standard from the very first popup window, I think we\u2019ll make better decisions on every feature that follows.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 14 Jul 2026 19:03 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nZenya Philosophy (Draft)\r\n\r\nVision\r\n\r\nBuild the best companion for Strava.\r\n\r\nNot a replacement.\r\n\r\nNot a collection of scripts.\r\n\r\nA product people enjoy using.\r\n\r\n\u2e3b\r\n\r\nProduct Principles\r\n\r\n* Enhance Strava rather than replace it.\r\n* Use data already presented to the user whenever possible.\r\n* The user is always in control.\r\n* One polished workflow is better than ten unfinished features.\r\n* Calm, uncluttered design.\r\n* Beautiful software inspires confidence.\r\n\r\n\u2e3b\r\n\r\nDevelopment Philosophy\r\n\r\nThe shell comes first.\r\n\r\nFeatures come second.\r\n\r\nEvery future tool inherits the same experience.\r\n\r\n\u2e3b\r\n\r\nTechnical Philosophy\r\n\r\nThe bookmarklet is the gateway.\r\n\r\nThe Zenya Shell is the product.\r\n\r\nAuto Kudos is Module #1.\r\n\r\nRoute Crop is Module #2.\r\n\r\nEverything else plugs into the shell.\r\n\r\n\u2e3b\r\n\r\nDesign Philosophy\r\n\r\nEvery pixel earns its place.\r\n\r\nEvery animation has a purpose.\r\n\r\nEvery dialog should feel intentional.\r\n\r\nIf it isn\u2019t beautiful yet\u2026\r\n\r\n\u2026it isn\u2019t finished.\r\n\r\n\u2e3b\r\n\r\nBrand Philosophy\r\n\r\nPeople don\u2019t recommend code.\r\n\r\nThey recommend products.\r\n\r\nPeople don\u2019t remember utilities.\r\n\r\nThey remember brands.\r\n\r\n\u2e3b\r\n\r\nOne thing I hope you\u2019ll keep in your Library is this sentence, because I think it\u2019s become our north star:\r\n\r\nWe\u2019re not building the best Auto Kudos utility. We\u2019re building the best companion for Strava.\r\n\r\nEverything we\u2019ve discussed over the last few hours\u2014the bookmarklet, the shell, the logo, the restrained UI, the product philosophy\u2014flows naturally from that one idea.\r\n\r\nI have a feeling that, years from now, Zenya won\u2019t be defined by whichever feature happened to launch first. It\u2019ll be defined by the experience users have every time they click that little Z in their bookmarks bar. And if we get that right, every future module starts with an enormous advantage.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 14 Jul 2026 19:35 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nThe Zenya Book\r\n\r\nNot for users.\r\n\r\nFor us.\r\n\r\nEvery time we make one of these decisions, it goes into the book.\r\n\r\nFor example:\r\n\r\n* Never expose implementation details.\r\n* Say \u201cAdd Zenya,\u201d never \u201cInstall bookmarklet.\u201d\r\n* One click should always accomplish something meaningful.\r\n* Zenya enhances Strava; it never replaces it.\r\n* Every screen has one purpose.\r\n* Beauty is a feature.\r\n\r\nTen pages.\r\n\r\nMaybe twenty someday.\r\n\r\nWhenever we\u2019re unsure about a feature, a piece of wording, or a UI decision, we don\u2019t ask, \u201cWhat\u2019s easiest to code?\u201d We ask, \u201cWhat does the Zenya Book say?\u201d\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 14 Jul 2026 19:36 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nChapter 1 \u2014 The Vision\r\n\r\nZenya exists to enhance the Strava experience through beautifully crafted tools.\r\n\r\n\u2e3b\r\n\r\nChapter 2 \u2014 Simplicity\r\n\r\nEvery feature should feel obvious.\r\n\r\nIf instructions are required\u2026\r\n\r\n\u2026the design probably needs work.\r\n\r\n\u2e3b\r\n\r\nChapter 3 \u2014 Respect\r\n\r\nRespect the user\u2019s:\r\n\r\n* time\r\n* attention\r\n* workflow\r\n\r\nNo unnecessary dialogs.\r\n\r\nNo unnecessary clicks.\r\n\r\nNo unnecessary settings.\r\n\r\n\u2e3b\r\n\r\nChapter 4 \u2014 Beauty\r\n\r\nBeauty is functionality.\r\n\r\nPolish creates trust.\r\n\r\nAnimation should communicate.\r\n\r\nWhitespace is a feature.\r\n\r\n\u2e3b\r\n\r\nChapter 5 \u2014 Brand\r\n\r\nNever expose implementation details.\r\n\r\nUsers add Zenya.\r\n\r\nUsers open Zenya.\r\n\r\nNever mention JavaScript, bookmarklets, loaders, DOM injection, etc.\r\n\r\n\u2e3b\r\n\r\nChapter 6 \u2014 Architecture\r\n\r\nThe Shell is the product.\r\n\r\nModules plug into the Shell.\r\n\r\nThe Shell knows nothing about modules.\r\n\r\nModules know nothing about each other.\r\n\r\n\u2e3b\r\n\r\nChapter 7 \u2014 Growth\r\n\r\nEvery module should feel like it always belonged.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 22 Jul 2026 10:31 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nAgreed. We should design for that destination now, without actually building Firebase or Google Drive integration yet.\r\n\r\nThe eventual architecture would be:\r\n\r\nZenya account / Firebase \u2192 identity, authentication, subscription status, entitlements, perhaps tiny amounts of configuration.\r\n\r\nGoogle Drive \u2192 all substantial user-owned Zenya data: Activity Explorer index, preferences that should sync, future saved comparisons, collections, etc.\r\n\r\nIndexedDB \u2192 local working cache for speed and offline-ish operation.\r\n\r\nZenya.bike \u2192 application code and gateway/orchestration, but not the repository for users\u2019 Strava activity data.\r\n\r\nThe important architectural rule now should be: Activity Explorer never directly reads or writes IndexedDB. Instead, all data access goes through a Zenya data layer. Initially that layer only has a local storage provider; later Firebase authentication can select the user\u2019s Drive-backed provider and synchronize the local cache.\r\n\r\nConceptually: \r\n\r\nActivity Explorer\r\n       \u2502\r\n       \u25bc\r\nZenya Data Layer\r\n       \u2502\r\n       \u251c\u2500\u2500 Local Cache (IndexedDB)\r\n       \u2502\r\n       \u2514\u2500\u2500 Sync Provider\r\n              \u2502\r\n              \u2514\u2500\u2500 Google Drive\r\n\r\nThen the premium transition becomes additive rather than a rewrite. A free user might operate entirely from IndexedDB. A premium user signs into Zenya, Firebase confirms the account and entitlement, Google authorization connects their Drive, and the same Activity Explorer begins syncing its existing local index. Their first upgrade could literally migrate the already-built local database into their Drive.\r\n\r\nI would also avoid designing the index as one giant opaque JSON file. We should give every activity a stable key based on the Strava activity ID and include schema/version metadata from the beginning. That makes incremental updates, migrations, conflict resolution, and cross-device synchronization much easier.\r\n\r\nSo I think our next coding sequence should be: define the Activity Index schema \u2192 build the storage interface \u2192 implement IndexedDB as the first provider \u2192 build the Strava activity scanner \u2192 build Activity Explorer on top of that interface.\r\n\r\nThat way, nothing we build for Activity Explorer today should need to know whether the user eventually becomes a free local-only user or a premium Firebase/Google Drive user.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 24 Jul 2026 11:58 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nExplorer Index\r\n\r\n* Derive startDate from startDateLocal during normalization.\r\n* Format as: October 8, 2023 at 12:52 PM.\r\n* Treat startDateLocal as the canonical value and startDate as a generated display string.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 26 Jul 2026 12:14 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nI think you\u2019ve covered the major architectural decisions. If I were writing a Zenya 1.0 architecture document, it would look something like this.\r\n\r\nWorkspace\r\n\r\n* \u2705 One Workspace per user.\r\n* \u2705 Provider-independent (Google Drive initially, others later).\r\n* \u2705 Workspace is simply a folder.\r\n* \u2705 Browser remembers where the Workspace is; the Workspace contains the important data.\r\n\r\nStorage\r\n\r\n* \u2705 SQLite database.\r\n* \u2705 Original FIT files preserved.\r\n* \u2705 Original GPX files preserved.\r\n* \u2705 Original TCX files preserved.\r\n* \u2705 Every CSV field imported, even if unused today.\r\n* \u2705 Original Strava JSON preserved (I\u2019d still recommend this if available in the export).\r\n* \u2705 No media stored locally.\r\n* \u2705 Media fetched from Strava on demand or viewed via \u201cOpen in Strava.\u201d\r\n\r\nSynchronization\r\n\r\n* \u2705 Single active editing session.\r\n* \u2705 Session ownership transfers between devices.\r\n* \u2705 Frequent polling (every few seconds is fine).\r\n* \u2705 Verify session ownership immediately before writes.\r\n\r\nExplorer philosophy\r\n\r\n* \u2705 Zenya handles analysis, search, editing, comparison, AI.\r\n* \u2705 Strava handles photos, videos, comments, clubs, kudos, social features.\r\n\r\nPortability\r\n\r\n* \u2705 Workspace can be copied between cloud providers.\r\n* \u2705 No vendor lock-in.\r\n* \u2705 Browser-only operation.\r\n\r\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 26 Jul 2026 12:16 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nI think you\u2019ve covered the major architectural decisions. If I were writing a Zenya 1.0 architecture document, it would look something like this.\r\n\r\nWorkspace\r\n\r\n* \u2705 One Workspace per user.\r\n* \u2705 Provider-independent (Google Drive initially, others later).\r\n* \u2705 Workspace is simply a folder.\r\n* \u2705 Browser remembers where the Workspace is; the Workspace contains the important data.\r\n\r\nStorage\r\n\r\n* \u2705 SQLite database.\r\n* \u2705 Original FIT files preserved.\r\n* \u2705 Original GPX files preserved.\r\n* \u2705 Original TCX files preserved.\r\n* \u2705 Every CSV field imported, even if unused today.\r\n* \u2705 Original Strava JSON preserved (I\u2019d still recommend this if available in the export).\r\n* \u2705 No media stored locally.\r\n* \u2705 Media fetched from Strava on demand or viewed via \u201cOpen in Strava.\u201d\r\n\r\nSynchronization\r\n\r\n* \u2705 Single active editing session.\r\n* \u2705 Session ownership transfers between devices.\r\n* \u2705 Frequent polling (every few seconds is fine).\r\n* \u2705 Verify session ownership immediately before writes.\r\n\r\nExplorer philosophy\r\n\r\n* \u2705 Zenya handles analysis, search, editing, comparison, AI.\r\n* \u2705 Strava handles photos, videos, comments, clubs, kudos, social features.\r\n\r\nPortability\r\n\r\n* \u2705 Workspace can be copied between cloud providers.\r\n* \u2705 No vendor lock-in.\r\n* \u2705 Browser-only operation.\r\n\r\n{\r\n  \"workspaceVersion\": 1,\r\n  \"sessionId\": \"b82d9d3f...\",\r\n  \"deviceName\": \"Robert's MacBook Pro\",\r\n  \"deviceType\": \"desktop\",\r\n  \"started\": \"2026-07-26T15:20:12Z\",\r\n  \"lastHeartbeat\": \"2026-07-26T15:35:08Z\"\r\n}\r\n\r\nThe heartbeat is simply a timestamp written every few seconds.\r\n\r\nWhy it\u2019s useful\r\n\r\nIt gives you several benefits:\r\n\r\n* You can display:\r\n    Active now\r\n    or\r\n    Last active 8 seconds ago\r\n* If someone opens the Workspace elsewhere, they know whether the other device is actually in use or was simply left open.\r\n* If a browser crashes, you still have a record of the last activity.\r\n* It makes debugging much easier.\r\n\r\nwnership transfer\r\n\r\nSuppose your iPhone is open.\r\n\r\nYour Mac opens the Workspace.\r\n\r\nIt reads:\r\n\r\nRobert's iPhone\r\n\r\nLast active: 4 seconds ago\r\n\r\nThe dialog says:\r\n\r\nWorkspace currently open on Robert\u2019s iPhone.\r\n\r\nContinue on this device?\r\n\r\nIf you press Continue, the Mac writes a new session.json.\r\n\r\nA few seconds later the phone polls, notices the session ID has changed, and immediately switches to read-only mode or displays:\r\n\r\nThis Workspace has been opened on another device.\r\n\r\nThat creates a clean handoff.\r\n\r\nI would avoid timeouts\r\n\r\nThis is one thing I\u2019d keep from our earlier discussion.\r\n\r\nThe timestamp is informational, not authoritative.\r\n\r\nIt helps users understand what\u2019s happening, but it doesn\u2019t automatically decide ownership.\r\n\r\nOwnership changes only when another device explicitly takes over.\r\n\r\nThat avoids all kinds of edge cases involving network interruptions, sleeping laptops, or phones temporarily losing connectivity.\r\n\r\nI think that\u2019s a robust and user-friendly model. It also keeps the implementation simple: a lightweight heartbeat provides useful status information, while explicit user actions\u2014not elapsed time\u2014determine which device owns the editing session.\n\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 26 Jul 2026 12:17 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nFrom my perspective, we\u2019ve crossed an important milestone. The discussion has shifted from \u201cWhat if?\u201d to \u201cHere\u2019s the architecture.\u201d\r\n\r\nIf I were writing the Zenya Architecture v1.0 document, I\u2019d consider these decisions settled:\r\n\r\n* Browser-based application.\r\n* Provider-independent Workspace abstraction.\r\n* SQLite as the primary data store.\r\n* Original FIT/GPX/TCX files preserved.\r\n* Every Strava CSV field imported and preserved.\r\n* Media remains on Strava and is loaded on demand or via \u201cOpen in Strava.\u201d\r\n* Compact Workspace (roughly a few hundred MB for a decade of data).\r\n* Single active editing session.\r\n* Session ownership transferred explicitly by the user.\r\n* Heartbeat timestamp written every few seconds to indicate active status.\r\n* Browser stores only a Workspace pointer; the Workspace stores everything important.\r\n* Separation of original archival data from Zenya-derived data.\r\n\r\nI also think one of the strongest design principles to emerge is this:\r\n\r\nThe Workspace is the user\u2019s permanent archive. Zenya is simply the application that understands it.\r\n\r\nThat keeps the data independent of the application itself. If Zenya grows over the next five or ten years, the Workspace remains the constant.\r\n\r\nAs for putting it in my \u201cmemory banks\u201d: I can remember some persistent user preferences and long-term facts, but I can\u2019t automatically save new project architecture into long-term memory from a conversation. The safest approach is exactly what you\u2019re doing\u2014archive this discussion. Given how carefully you\u2019ve documented Zenya throughout development, I think having these design decisions in your own archive is actually better: they\u2019re explicit, versioned, and under your control.\r\n\r\nAnd I have to say, this has been one of the more enjoyable software architecture discussions I\u2019ve had. We started with \u201cHow do we edit FIT files in the browser?\u201d and have gradually arrived at a coherent platform architecture. That\u2019s been a fun progression.",
            "created": "2026-07-14T12:08:46-05:00",
            "modified": "2026-07-26T12:17:31-05:00",
            "media": [
                {
                    "id": "1",
                    "type": "image",
                    "file": "2026/07/6a566d1e31adb-1.png",
                    "filename": "Screenshot 2026-07-24 at 11.56.39\u202fAM.png",
                    "created": "2026-07-24T11:58:59-05:00"
                },
                {
                    "id": "2",
                    "type": "image",
                    "file": "2026/07/6a566d1e31adb-2.png",
                    "filename": "Screenshot 2026-07-24 at 11.56.48\u202fAM.png",
                    "created": "2026-07-24T11:58:59-05:00"
                }
            ]
        }
    ],
    "Recipes": [
        {
            "id": "6a60e36867fb6",
            "title": "Instant Pot Basmati Rice Recipe - Piping Pot Curry",
            "url": "https://pipingpotcurry.com/instant-pot-basmati-rice/",
            "notes": "",
            "created": "2026-07-22T10:36:08-05:00",
            "modified": "2026-07-22T10:36:15-05:00"
        }
    ],
    "cunningham peaches": [
        {
            "id": "6a6691ec892e8",
            "title": "cunningham peaches",
            "url": "",
            "notes": "Jenness:\r\nfour #2 peaches $40 - $160\r\n2 honey $18 - $36 \r\n$176\r\n\r\nMolly:\r\n2 honey $18 - $36\r\n\r\nEric: #1 box $50\r\nhoney $18\r\n\r\n--$78\r\n\r\nCathy Heiney:\r\nhalf #1 box $27\r\npeach salsa $12",
            "created": "2026-07-26T18:02:04-05:00",
            "modified": "2026-07-26T18:50:57-05:00"
        }
    ]
}