This product was not featured by Product Hunt yet. It will not be visible on their landing page and won't be ranked (cannot win product of the day regardless of upvotes).
Change a domain and most search and replace tools quietly miss the URLs inside page builders. Elementor stores layouts as JSON inside PHP serialized values, with slashes escaped. Search for https://oldsite.com and you match nothing. Search the escaped form and replace as text and you corrupt the row, because serialization stores byte lengths that stop matching. Lucid unserializes, walks the tree, decodes the JSON leaves, and keeps the original escaping. Preview first, snapshot, undo.
maker here. the bug that made me write this is more interesting than the plugin.
page builders like Elementor store a whole page layout as JSON, and that JSON sits inside a PHP serialized value. PHP escapes forward slashes when it encodes JSON, so the two strings below are the same URL. the first is what is actually in your database. the second is what you would type into a search box.
search for the second and you match nothing. the replace reports success, changes hundreds of other rows, and every page still points at the old domain. you find out when someone opens one.
searching for the escaped form is worse. PHP serialization writes a byte length before each string, so a 19 character domain is stored behind s:19. swap it for a 22 character one as plain text and the prefix still says 19, unserialize() hits the wrong boundary and returns false, and the row is gone. that is the "search and replace corrupted my database" story.
the part that took longest: you have to preserve the original slash escaping when you re-encode. two JSON encodings of the same data are both valid and different lengths, so you can decode, replace correctly, re-encode correctly, and still hand back a value that no longer matches its own length prefix.
it previews representative matches before writing anything, can snapshot first, and can undo. GPL, no paid tier, nothing held back.
disclosure: I also sell a separate WordPress backup plugin. this is not a lite version of it and there is no upgrade path being sold here.
happy to be told I have missed a case. I only verified Elementor properly and would like to know how other builders store things.
No comment highlights available yet. Please check back later!
About Lucid Search & Replace on Product Hunt
“Search and replace that survives serialized data”
Lucid Search & Replace was submitted on Product Hunt and earned 0 upvotes and 1 comments, placing #152 on the daily leaderboard. Change a domain and most search and replace tools quietly miss the URLs inside page builders. Elementor stores layouts as JSON inside PHP serialized values, with slashes escaped. Search for https://oldsite.com and you match nothing. Search the escaped form and replace as text and you corrupt the row, because serialization stores byte lengths that stop matching. Lucid unserializes, walks the tree, decodes the JSON leaves, and keeps the original escaping. Preview first, snapshot, undo.
Lucid Search & Replace was featured in Open Source (68.9k followers), WordPress (21.6k followers), GitHub (41.4k followers) and Development (6.2k followers) on Product Hunt. Together, these topics include over 51.1k products, making this a competitive space to launch in.
Who hunted Lucid Search & Replace?
Lucid Search & Replace was hunted by Ibrahim Hajjaj. A “hunter” on Product Hunt is the community member who submits a product to the platform — uploading the images, the link, and tagging the makers behind it. Hunters typically write the first comment explaining why a product is worth attention, and their followers are notified the moment they post. Around 79% of featured launches on Product Hunt are self-hunted by their makers, but a well-known hunter still acts as a signal of quality to the rest of the community. See the full all-time top hunters leaderboard to discover who is shaping the Product Hunt ecosystem.
Want to see how Lucid Search & Replace stacked up against nearby launches in real time? Check out the live launch dashboard for upvote speed charts, proximity comparisons, and more analytics.
maker here. the bug that made me write this is more interesting than the plugin.
page builders like Elementor store a whole page layout as JSON, and that JSON sits inside a PHP serialized value. PHP escapes forward slashes when it encodes JSON, so the two strings below are the same URL. the first is what is actually in your database. the second is what you would type into a search box.
search for the second and you match nothing. the replace reports success, changes hundreds of other rows, and every page still points at the old domain. you find out when someone opens one.
searching for the escaped form is worse. PHP serialization writes a byte length before each string, so a 19 character domain is stored behind s:19. swap it for a 22 character one as plain text and the prefix still says 19, unserialize() hits the wrong boundary and returns false, and the row is gone. that is the "search and replace corrupted my database" story.
the part that took longest: you have to preserve the original slash escaping when you re-encode. two JSON encodings of the same data are both valid and different lengths, so you can decode, replace correctly, re-encode correctly, and still hand back a value that no longer matches its own length prefix.
it previews representative matches before writing anything, can snapshot first, and can undo. GPL, no paid tier, nothing held back.
disclosure: I also sell a separate WordPress backup plugin. this is not a lite version of it and there is no upgrade path being sold here.
happy to be told I have missed a case. I only verified Elementor properly and would like to know how other builders store things.