<?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: Robert Saylor</title>
    <description>The latest articles on DEV Community by Robert Saylor (@robert_saylor_c9db74549e2).</description>
    <link>https://dev.to/robert_saylor_c9db74549e2</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%2F2171165%2F45f5db5d-578c-4e01-9bc7-0408c1b11dc1.jpg</url>
      <title>DEV Community: Robert Saylor</title>
      <link>https://dev.to/robert_saylor_c9db74549e2</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/robert_saylor_c9db74549e2"/>
    <language>en</language>
    <item>
      <title>Modernizing a 10+ Year Old PHP Application into Laravel 12 (Historical Text Archive Case Study)</title>
      <dc:creator>Robert Saylor</dc:creator>
      <pubDate>Sun, 29 Mar 2026 23:14:13 +0000</pubDate>
      <link>https://dev.to/robert_saylor_c9db74549e2/modernizing-a-10-year-old-php-application-into-laravel-12-historical-text-archive-case-study-9b2</link>
      <guid>https://dev.to/robert_saylor_c9db74549e2/modernizing-a-10-year-old-php-application-into-laravel-12-historical-text-archive-case-study-9b2</guid>
      <description>&lt;p&gt;When you inherit a PHP application that has been running for over a decade, stability and technical debt often grow together.&lt;/p&gt;

&lt;p&gt;That was the situation with the Historical Text Archive (HTA), a long-running content site containing hundreds of historical articles, primary sources, and educational material.&lt;/p&gt;

&lt;p&gt;Over time, the original codebase became harder to maintain, harder to extend, and increasingly difficult to integrate with modern tooling.&lt;/p&gt;

&lt;p&gt;Rather than continue patching the legacy system, we decided to modernize the platform using Laravel 12 while preserving the data structure and URLs that search engines already trust.&lt;/p&gt;

&lt;p&gt;HTA is publicly available here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://historicaltextarchive.org" rel="noopener noreferrer"&gt;https://historicaltextarchive.org&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Goals of the Migration
&lt;/h2&gt;

&lt;p&gt;We wanted to improve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maintainability&lt;/li&gt;
&lt;li&gt;security&lt;/li&gt;
&lt;li&gt;search functionality&lt;/li&gt;
&lt;li&gt;extensibility&lt;/li&gt;
&lt;li&gt;performance&lt;/li&gt;
&lt;li&gt;developer experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;while keeping:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;existing URLs intact&lt;/li&gt;
&lt;li&gt;article IDs stable&lt;/li&gt;
&lt;li&gt;database structure understandable&lt;/li&gt;
&lt;li&gt;SEO authority preserved&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Challenges of Legacy PHP
&lt;/h2&gt;

&lt;p&gt;The original application was built more than 10 years ago using procedural PHP and a MySQL database.&lt;/p&gt;

&lt;p&gt;Common issues we encountered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mixed business logic and presentation&lt;/li&gt;
&lt;li&gt;limited separation of concerns&lt;/li&gt;
&lt;li&gt;manual SQL queries everywhere&lt;/li&gt;
&lt;li&gt;inconsistent naming conventions&lt;/li&gt;
&lt;li&gt;limited testability&lt;/li&gt;
&lt;li&gt;difficulty adding new features&lt;/li&gt;
&lt;li&gt;older authentication approach&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Despite these limitations, the schema itself was solid. The database structure had aged well, making it a good candidate for migration.&lt;/p&gt;




&lt;h2&gt;
  
  
  Migration Strategy
&lt;/h2&gt;

&lt;p&gt;Instead of rewriting everything at once, we focused on incremental modernization.&lt;/p&gt;

&lt;p&gt;High-level approach:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;export existing database schema&lt;/li&gt;
&lt;li&gt;generate Laravel migrations from schema&lt;/li&gt;
&lt;li&gt;generate Eloquent models&lt;/li&gt;
&lt;li&gt;replicate core functionality&lt;/li&gt;
&lt;li&gt;preserve routes and URLs&lt;/li&gt;
&lt;li&gt;add modern features&lt;/li&gt;
&lt;li&gt;improve search capabilities&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach reduced risk and allowed the application to remain functional during development.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Converting SQL Schema into Laravel Migrations
&lt;/h2&gt;

&lt;p&gt;We started with a schema.sql dump from the legacy application.&lt;/p&gt;

&lt;p&gt;From there we generated Laravel migration files that recreated the structure in a fresh database.&lt;/p&gt;

&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;version controlled schema&lt;/li&gt;
&lt;li&gt;easier onboarding for future developers&lt;/li&gt;
&lt;li&gt;consistent database structure across environments&lt;/li&gt;
&lt;li&gt;rollback capability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example migration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Schema&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'articles'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;Blueprint&lt;/span&gt; &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;increments&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'artid'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;integer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'secid'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'published'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nv"&gt;$table&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'body'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2: Generating Eloquent Models
&lt;/h2&gt;

&lt;p&gt;Once migrations were in place, we created Eloquent models for each major table.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Article&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nc"&gt;Model&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$primaryKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'artid'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$fillable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s1"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'secid'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'published'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s1"&gt;'body'&lt;/span&gt;
    &lt;span class="p"&gt;];&lt;/span&gt;

    &lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;section&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;belongsTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Section&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'secid'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;structured ORM relationships&lt;/li&gt;
&lt;li&gt;simplified queries&lt;/li&gt;
&lt;li&gt;reusable logic&lt;/li&gt;
&lt;li&gt;easier refactoring&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 3: Preserving SEO-Friendly URLs
&lt;/h2&gt;

&lt;p&gt;One of the most important requirements was preserving search engine rankings.&lt;/p&gt;

&lt;p&gt;Many HTA articles have been indexed for years.&lt;/p&gt;

&lt;p&gt;Breaking URLs would:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reduce search visibility&lt;/li&gt;
&lt;li&gt;lose backlinks&lt;/li&gt;
&lt;li&gt;create poor user experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We maintained existing routes wherever possible:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Route&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/articles/{artid}/{slug?}'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;ArticleController&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'show'&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allowed legacy URLs to continue working without redirects.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Improving Search
&lt;/h2&gt;

&lt;p&gt;Search is central to any archive.&lt;/p&gt;

&lt;p&gt;The legacy system used simple SQL queries which worked but were limited.&lt;/p&gt;

&lt;p&gt;Laravel makes it easier to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;expand search fields&lt;/li&gt;
&lt;li&gt;add filters&lt;/li&gt;
&lt;li&gt;build indexing logic&lt;/li&gt;
&lt;li&gt;support future AI categorization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example search query:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight php"&gt;&lt;code&gt;&lt;span class="nc"&gt;Article&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'title'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'like'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"%&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$search&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;%"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;orWhere&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'body'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'like'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"%&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;$search&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;%"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nf"&gt;paginate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Future improvements may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;full text indexing&lt;/li&gt;
&lt;li&gt;semantic search&lt;/li&gt;
&lt;li&gt;tagging automation&lt;/li&gt;
&lt;li&gt;historical topic clustering&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Step 5: Modern Development Workflow
&lt;/h2&gt;

&lt;p&gt;Laravel provides a modern toolkit:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;migrations&lt;/li&gt;
&lt;li&gt;artisan CLI&lt;/li&gt;
&lt;li&gt;blade templates&lt;/li&gt;
&lt;li&gt;validation rules&lt;/li&gt;
&lt;li&gt;routing system&lt;/li&gt;
&lt;li&gt;middleware&lt;/li&gt;
&lt;li&gt;queue support&lt;/li&gt;
&lt;li&gt;testing tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example artisan usage:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;php artisan migrate
php artisan make:model Article
php artisan make:controller ArticleController
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Development is now faster and more consistent.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 6: Preparing for Future Features
&lt;/h2&gt;

&lt;p&gt;With Laravel in place, HTA can now expand into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;newsletter automation&lt;/li&gt;
&lt;li&gt;"On this day in history" article discovery&lt;/li&gt;
&lt;li&gt;improved article categorization&lt;/li&gt;
&lt;li&gt;editorial workflow improvements&lt;/li&gt;
&lt;li&gt;API endpoints&lt;/li&gt;
&lt;li&gt;AI assisted tagging&lt;/li&gt;
&lt;li&gt;advanced search capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the foundation is now structured, new features are significantly easier to implement.&lt;/p&gt;




&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;p&gt;Migrating a legacy PHP application does not require abandoning everything.&lt;/p&gt;

&lt;p&gt;In many cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the database design is still valuable&lt;/li&gt;
&lt;li&gt;the content is still valuable&lt;/li&gt;
&lt;li&gt;the domain authority is still valuable&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Laravel allows modernization without losing what already works.&lt;/p&gt;

&lt;p&gt;For HTA, the result is a platform that keeps its historical depth while gaining modern flexibility.&lt;/p&gt;




&lt;h2&gt;
  
  
  Live Site
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://historicaltextarchive.org" rel="noopener noreferrer"&gt;https://historicaltextarchive.org&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you are working with a legacy PHP application, start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;database migration&lt;/li&gt;
&lt;li&gt;model structure&lt;/li&gt;
&lt;li&gt;route preservation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modernization can happen incrementally without disrupting users.&lt;/p&gt;

&lt;p&gt;Sometimes the best upgrade is not replacing everything, but building a better foundation underneath what already exists.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>webdev</category>
      <category>history</category>
    </item>
    <item>
      <title>VidShare Just Got Approved for Facebook, Instagram, and TikTok 🎉</title>
      <dc:creator>Robert Saylor</dc:creator>
      <pubDate>Fri, 27 Mar 2026 16:10:28 +0000</pubDate>
      <link>https://dev.to/robert_saylor_c9db74549e2/vidshare-just-got-approved-for-facebook-instagram-and-tiktok-511k</link>
      <guid>https://dev.to/robert_saylor_c9db74549e2/vidshare-just-got-approved-for-facebook-instagram-and-tiktok-511k</guid>
      <description>&lt;p&gt;This week was a big milestone for &lt;strong&gt;VidShare&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After weeks of development, testing, and API reviews, &lt;strong&gt;&lt;a href="https://vidshare.us" rel="noopener noreferrer"&gt;VidShare&lt;/a&gt; is now approved to publish video content to Facebook, Instagram, and TikTok&lt;/strong&gt;, bringing us closer to the goal of making video distribution simple again.&lt;/p&gt;

&lt;p&gt;VidShare started with a simple idea:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Upload once, shape the post, and publish across your video stack.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Creators shouldn’t have to upload the same video 5+ times just to stay consistent online.&lt;/p&gt;

&lt;p&gt;And now, that workflow is finally becoming reality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Publishing video content across multiple platforms is still surprisingly manual.&lt;/p&gt;

&lt;p&gt;Even experienced creators often:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Export the same video multiple times&lt;/li&gt;
&lt;li&gt;Resize or tweak captions per platform&lt;/li&gt;
&lt;li&gt;Upload separately to each social network&lt;/li&gt;
&lt;li&gt;Try to keep everything scheduled consistently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This repetitive work slows creators down and makes consistency harder than it should be.&lt;/p&gt;

&lt;p&gt;Social media scheduling tools have existed for years, helping marketers plan and publish content more efficiently across channels.&lt;/p&gt;

&lt;p&gt;VidShare focuses specifically on video-first creators, simplifying the process of distributing video content across multiple platforms from one place.&lt;/p&gt;

&lt;h2&gt;
  
  
  Newly Approved Platforms
&lt;/h2&gt;

&lt;p&gt;This week, VidShare received approval for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Facebook video publishing&lt;/li&gt;
&lt;li&gt;Instagram video publishing&lt;/li&gt;
&lt;li&gt;TikTok draft publishing&lt;/li&gt;
&lt;li&gt;LinkedIn video publishing (already available)&lt;/li&gt;
&lt;li&gt;YouTube publishing&lt;/li&gt;
&lt;li&gt;Pinterest video support&lt;/li&gt;
&lt;li&gt;Additional platforms including Bluesky and Mastodon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With these approvals, creators can now manage most of their core video distribution workflow from a single dashboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Workflow Inside VidShare
&lt;/h2&gt;

&lt;p&gt;The workflow is intentionally simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload your video once&lt;/li&gt;
&lt;li&gt;Customize captions for each platform if needed&lt;/li&gt;
&lt;li&gt;Choose publish time or schedule&lt;/li&gt;
&lt;li&gt;VidShare distributes the content automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No more jumping between apps just to post the same content repeatedly.&lt;/p&gt;

&lt;h2&gt;
  
  
  TikTok Draft Support
&lt;/h2&gt;

&lt;p&gt;One of the most requested features has been TikTok support.&lt;/p&gt;

&lt;p&gt;TikTok’s API review process is known to be more restrictive than other platforms, particularly around content publishing permissions.&lt;/p&gt;

&lt;p&gt;Instead of immediately publishing videos publicly, VidShare currently supports sending videos directly to the user's TikTok drafts inbox, giving creators full control before posting.&lt;/p&gt;

&lt;p&gt;This provides a balance between automation and creative flexibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why We Built VidShare
&lt;/h2&gt;

&lt;p&gt;VidShare was created after experiencing the same frustration many creators have:&lt;/p&gt;

&lt;p&gt;Uploading the same video repeatedly across platforms wastes time that could be spent creating better content.&lt;/p&gt;

&lt;p&gt;Many existing tools focus heavily on analytics or enterprise workflows.&lt;/p&gt;

&lt;p&gt;VidShare focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simplicity&lt;/li&gt;
&lt;li&gt;speed&lt;/li&gt;
&lt;li&gt;creator-first workflow&lt;/li&gt;
&lt;li&gt;AI-assisted optimization&lt;/li&gt;
&lt;li&gt;reducing repetitive tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is not to replace creativity, but to remove friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Next
&lt;/h2&gt;

&lt;p&gt;Now that major platform approvals are in place, the roadmap becomes clearer.&lt;/p&gt;

&lt;p&gt;Upcoming areas of exploration include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;improved scheduling workflows&lt;/li&gt;
&lt;li&gt;bulk upload capabilities&lt;/li&gt;
&lt;li&gt;expanded AI optimization tools&lt;/li&gt;
&lt;li&gt;deeper integrations with additional platforms&lt;/li&gt;
&lt;li&gt;improved creator discovery features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One step at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build in Public
&lt;/h2&gt;

&lt;p&gt;VidShare is still early, but momentum is building quickly.&lt;/p&gt;

&lt;p&gt;Recent milestones include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-platform publishing support&lt;/li&gt;
&lt;li&gt;AI-assisted captions and descriptions&lt;/li&gt;
&lt;li&gt;unified video calendar&lt;/li&gt;
&lt;li&gt;OAuth integrations across major platforms&lt;/li&gt;
&lt;li&gt;creator-focused workflow design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And now:&lt;/p&gt;

&lt;p&gt;Facebook, Instagram, and TikTok approval.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try VidShare
&lt;/h2&gt;

&lt;p&gt;If you create video content and want to simplify distribution:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://vidshare.us" rel="noopener noreferrer"&gt;VidShare&lt;/a&gt; is designed to help you stay consistent without increasing workload.&lt;/p&gt;

&lt;p&gt;Upload once. Publish everywhere.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>news</category>
      <category>automation</category>
      <category>startup</category>
    </item>
    <item>
      <title>Introducing Get Discovered: A New Way for Creators to Grow with VidShare</title>
      <dc:creator>Robert Saylor</dc:creator>
      <pubDate>Thu, 19 Mar 2026 12:15:49 +0000</pubDate>
      <link>https://dev.to/robert_saylor_c9db74549e2/introducing-get-discovered-a-new-way-for-creators-to-grow-with-vidshare-i58</link>
      <guid>https://dev.to/robert_saylor_c9db74549e2/introducing-get-discovered-a-new-way-for-creators-to-grow-with-vidshare-i58</guid>
      <description>&lt;p&gt;If you’ve ever uploaded content and felt like it just… disappeared into the void—you’re not alone.&lt;/p&gt;

&lt;p&gt;One of the hardest parts of being a creator today isn’t making content.&lt;/p&gt;

&lt;p&gt;It’s getting noticed.&lt;/p&gt;

&lt;p&gt;That’s exactly why we built something new inside VidShare:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 Get Discovered&lt;/strong&gt;*&lt;br&gt;
&lt;a href="https://vidshare.us/get-discovered" rel="noopener noreferrer"&gt;https://vidshare.us/get-discovered&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 The Problem
&lt;/h2&gt;

&lt;p&gt;Creators today are everywhere—YouTube, Instagram, TikTok, Pinterest… the list never ends.&lt;/p&gt;

&lt;p&gt;Tools like VidShare already help solve one big issue:&lt;br&gt;
upload once, distribute everywhere.&lt;/p&gt;

&lt;p&gt;But distribution alone doesn’t solve visibility.&lt;/p&gt;

&lt;p&gt;Because even if your content is everywhere…&lt;br&gt;
it still has to compete with everything else.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 The Idea Behind Get Discovered
&lt;/h2&gt;

&lt;p&gt;We wanted to flip the script.&lt;/p&gt;

&lt;p&gt;Instead of chasing algorithms, what if creators had a dedicated space to be seen?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get Discovered&lt;/strong&gt; is exactly that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A place where creators can feature themselves&lt;/li&gt;
&lt;li&gt;A system where visibility is earned through engagement&lt;/li&gt;
&lt;li&gt;A platform designed to help creators grow their audience organically&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔥 How It Works
&lt;/h2&gt;

&lt;p&gt;Here’s the core concept:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Creators Sign Up (Free)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Anyone can create an account and join the discovery system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Get Featured&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Creators are scheduled into a featured window where they get visibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Community Voting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;During that time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Users can upvote creators&lt;/li&gt;
&lt;li&gt;The most engaging creators rise to the top&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Follow &amp;amp; Grow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Visitors can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click into creator profiles&lt;/li&gt;
&lt;li&gt;Follow them on their platforms&lt;/li&gt;
&lt;li&gt;Discover new content worth watching&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧠 Why This Matters
&lt;/h2&gt;

&lt;p&gt;Most platforms are built around algorithms.&lt;/p&gt;

&lt;p&gt;Get Discovered is built around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;People&lt;/li&gt;
&lt;li&gt;Community&lt;/li&gt;
&lt;li&gt;Fair exposure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It creates a level playing field where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New creators can compete&lt;/li&gt;
&lt;li&gt;Small creators can be seen&lt;/li&gt;
&lt;li&gt;Great content actually has a chance to win&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔗 Built to Work With Your Existing Content
&lt;/h2&gt;

&lt;p&gt;This isn’t another platform you have to “start over” on.&lt;/p&gt;

&lt;p&gt;It works alongside everything you’re already doing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload once with VidShare&lt;/li&gt;
&lt;li&gt;Distribute everywhere&lt;/li&gt;
&lt;li&gt;Then use Get Discovered to drive attention back to you&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 What’s Next
&lt;/h2&gt;

&lt;p&gt;This is just the beginning.&lt;/p&gt;

&lt;p&gt;We’re exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leaderboards&lt;/li&gt;
&lt;li&gt;Creator tiers&lt;/li&gt;
&lt;li&gt;Featured categories&lt;/li&gt;
&lt;li&gt;Deeper analytics&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  👉 Try It Out
&lt;/h2&gt;

&lt;p&gt;If you’re a content creator looking to grow your audience:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check it out here:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://vidshare.us/get-discovered" rel="noopener noreferrer"&gt;https://vidshare.us/get-discovered&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Build a Tool to Stop Uploading the Same Video 5 Times</title>
      <dc:creator>Robert Saylor</dc:creator>
      <pubDate>Wed, 18 Mar 2026 11:01:24 +0000</pubDate>
      <link>https://dev.to/robert_saylor_c9db74549e2/i-build-a-tool-to-stop-uploading-the-same-video-5-times-1341</link>
      <guid>https://dev.to/robert_saylor_c9db74549e2/i-build-a-tool-to-stop-uploading-the-same-video-5-times-1341</guid>
      <description>&lt;p&gt;As a developer and a content creator, I ran into a problem that felt way more painful than it should be:&lt;/p&gt;

&lt;p&gt;Uploading the same video… over and over… to different platforms.&lt;/p&gt;

&lt;p&gt;My workflow looked like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload to YouTube&lt;/li&gt;
&lt;li&gt;Upload again to Pinterest&lt;/li&gt;
&lt;li&gt;Upload again to Twitch&lt;/li&gt;
&lt;li&gt;Upload again to Mastodon&lt;/li&gt;
&lt;li&gt;Upload again to Bluesky&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every. Single. Time.&lt;/p&gt;

&lt;p&gt;It wasn’t just repetitive — it made it harder to stay consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Problem Isn’t Uploading — It’s Friction
&lt;/h2&gt;

&lt;p&gt;At first, I thought the issue was just “too many platforms.”&lt;/p&gt;

&lt;p&gt;But after doing this repeatedly, I realized something deeper:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The real problem is friction between platforms.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Each platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;has its own upload flow&lt;/li&gt;
&lt;li&gt;its own UI&lt;/li&gt;
&lt;li&gt;its own quirks&lt;/li&gt;
&lt;li&gt;its own timing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even small differences add up.&lt;/p&gt;

&lt;p&gt;And when posting becomes annoying, consistency drops.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built (For Myself First)
&lt;/h2&gt;

&lt;p&gt;So I built a tool called VidShare.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Upload once → distribute everywhere.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of repeating the same process 5 times, I wanted a single workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload video once&lt;/li&gt;
&lt;li&gt;Select platforms&lt;/li&gt;
&lt;li&gt;Let the system handle the rest&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What Works Today
&lt;/h2&gt;

&lt;p&gt;Right now, VidShare supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;YouTube&lt;/li&gt;
&lt;li&gt;Pinterest&lt;/li&gt;
&lt;li&gt;Twitch&lt;/li&gt;
&lt;li&gt;Mastodon&lt;/li&gt;
&lt;li&gt;Bluesky&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some platforms were easy.&lt;/p&gt;

&lt;p&gt;Others… not so much.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Hardest Part Wasn’t the Code
&lt;/h2&gt;

&lt;p&gt;Surprisingly, building the system wasn’t the hardest part.&lt;/p&gt;

&lt;p&gt;Getting &lt;strong&gt;platform approvals&lt;/strong&gt; was.&lt;/p&gt;

&lt;p&gt;If you’ve ever worked with APIs like Meta or TikTok, you already know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;strict permission reviews&lt;/li&gt;
&lt;li&gt;unclear requirements&lt;/li&gt;
&lt;li&gt;multiple submission cycles&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At one point, I had to build an entire UI just to prove I was using a permission correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned Building This
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Repetition is a product opportunity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If something feels annoying every time you do it, there’s probably a product hiding there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. APIs are the real bottleneck&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can build fast — but approvals slow everything down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Consistency beats perfection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Making it easier to post consistently is more valuable than optimizing each post individually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Is Going
&lt;/h2&gt;

&lt;p&gt;I’m currently working through approvals for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Facebook&lt;/li&gt;
&lt;li&gt;Instagram&lt;/li&gt;
&lt;li&gt;TikTok&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once those are in, the workflow becomes much more powerful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Most creators don’t struggle with making content.&lt;/p&gt;

&lt;p&gt;They struggle with distributing it efficiently.&lt;/p&gt;

&lt;p&gt;That’s the problem I’m trying to solve.&lt;/p&gt;

&lt;p&gt;If you're dealing with the same issue, I’d love to hear how you're handling multi-platform posting.&lt;/p&gt;

&lt;p&gt;Are you doing it manually, or using tools to streamline it?&lt;/p&gt;

&lt;p&gt;If you're dealing with the same problem, you can check it out here:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://vidshare.us" rel="noopener noreferrer"&gt;https://vidshare.us&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would love to hear how you're handling multi-platform posting.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>socialmedia</category>
    </item>
    <item>
      <title>I got tired of uploading videos to multiple platforms, so I built this</title>
      <dc:creator>Robert Saylor</dc:creator>
      <pubDate>Tue, 17 Mar 2026 12:33:53 +0000</pubDate>
      <link>https://dev.to/robert_saylor_c9db74549e2/i-got-tired-of-uploading-videos-to-multiple-platforms-so-i-built-this-3a30</link>
      <guid>https://dev.to/robert_saylor_c9db74549e2/i-got-tired-of-uploading-videos-to-multiple-platforms-so-i-built-this-3a30</guid>
      <description>&lt;p&gt;If you create video content, you probably know this workflow:&lt;/p&gt;

&lt;p&gt;Record or edit a video&lt;br&gt;&lt;br&gt;
Upload to YouTube&lt;br&gt;&lt;br&gt;
Then upload the same video to TikTok&lt;br&gt;&lt;br&gt;
Then Instagram&lt;br&gt;&lt;br&gt;
Then maybe Pinterest or others  &lt;/p&gt;

&lt;p&gt;Each platform has its own process, formatting, scheduling, and quirks.&lt;/p&gt;

&lt;p&gt;What should be simple turns into a repetitive, time-consuming task.&lt;/p&gt;

&lt;p&gt;I ran into this myself after growing a small audience on TikTok. When I started posting to YouTube and other platforms, I realized I was spending more time uploading and managing posts than actually creating content.&lt;/p&gt;

&lt;p&gt;And it only gets worse as you scale.&lt;/p&gt;

&lt;p&gt;The problem isn’t creating content anymore — it’s distributing it.&lt;/p&gt;

&lt;p&gt;So I built a tool to solve that.&lt;/p&gt;

&lt;p&gt;VidShare is a platform that lets you upload your video once and distribute it across multiple platforms without repeating the same steps over and over.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
Upload → configure → post → repeat&lt;/p&gt;

&lt;p&gt;It becomes:&lt;br&gt;
Upload once → select platforms → schedule → done&lt;/p&gt;

&lt;p&gt;The goal isn’t to replace any platform, but to remove the friction between them.&lt;/p&gt;

&lt;p&gt;Right now, creators are stitching together workflows manually, even though the content is often the same across platforms.&lt;/p&gt;

&lt;p&gt;It feels like something that should have been solved already.&lt;/p&gt;

&lt;p&gt;I’m still early in building this, and currently looking for creators who want to test it and give feedback.&lt;/p&gt;

&lt;p&gt;If you’re dealing with the same problem, I’d genuinely like to hear how you’re handling it today.&lt;/p&gt;

&lt;p&gt;Also curious — do you think this is something platforms will eventually solve themselves, or will third-party tools always fill the gap?&lt;/p&gt;

&lt;p&gt;If you want to check it out or try it:&lt;br&gt;
&lt;a href="https://vidshare.us" rel="noopener noreferrer"&gt;https://vidshare.us&lt;/a&gt;&lt;/p&gt;

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