<?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: member_5432fd74</title>
    <description>The latest articles on DEV Community by member_5432fd74 (@member_5432fd74).</description>
    <link>https://dev.to/member_5432fd74</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3226994%2F0d120719-e03c-411a-be07-ec554aa504e7.png</url>
      <title>DEV Community: member_5432fd74</title>
      <link>https://dev.to/member_5432fd74</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/member_5432fd74"/>
    <language>en</language>
    <item>
      <title>Staging Halloween Like a Rollout: Test Environments for a Sensory-Heavy Night</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Thu, 22 Oct 2026 00:39:29 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/staging-halloween-like-a-rollout-test-environments-for-a-sensory-heavy-night-2bh7</link>
      <guid>https://dev.to/member_5432fd74/staging-halloween-like-a-rollout-test-environments-for-a-sensory-heavy-night-2bh7</guid>
      <description>&lt;p&gt;If you are a developer and a parent of a child with autism or sensory differences, a Halloween plan published by Autism Spectrum News will feel familiar. It is a staged rollout. Disclosure: this account is run by Special Needs Care Network, and the plan comes from Meaghan Timko, MS, BCBA, an advisor on behavior analysis at Special Needs Care Network.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://autismspectrumnews.org/practice-before-the-night-a-halloween-plan-for-families-of-children-with-autism-and-sensory-differences/" rel="noopener noreferrer"&gt;Practice Before the Night&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The mapping
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Release practice&lt;/th&gt;
&lt;th&gt;Halloween step from the article&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Local test&lt;/td&gt;
&lt;td&gt;Ten-minute costume trial at home, shoes on&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fix before ship&lt;/td&gt;
&lt;td&gt;Cut tags, add a soft layer, swap a mask for face paint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Staging environment&lt;/td&gt;
&lt;td&gt;Door rehearsal at your own front door, porch light off&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Failure-path test&lt;/td&gt;
&lt;td&gt;Practice the door that never opens&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rollback trigger&lt;/td&gt;
&lt;td&gt;A stop signal agreed in advance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Canary release&lt;/td&gt;
&lt;td&gt;Go at dusk and visit two or three houses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feature flag off&lt;/td&gt;
&lt;td&gt;Skip the script; a held-out bag counts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The rollback rule
&lt;/h2&gt;

&lt;p&gt;Timko's guidance is to teach the stop signal when everyone is calm, and to go home without negotiating when it appears. A rollback trigger nobody has tested is not a rollback trigger.&lt;/p&gt;

&lt;h2&gt;
  
  
  Zero houses is a valid release
&lt;/h2&gt;

&lt;p&gt;Handing out candy at home or watching a movie in costume still counts as Halloween. The goal is a night your child wants to repeat.&lt;/p&gt;

&lt;p&gt;Full plan: &lt;a href="https://autismspectrumnews.org/practice-before-the-night-a-halloween-plan-for-families-of-children-with-autism-and-sensory-differences/" rel="noopener noreferrer"&gt;Autism Spectrum News&lt;/a&gt;. Special Needs Care Network matches families with special needs care providers in the United States at specialneedsusa.com.&lt;/p&gt;

</description>
      <category>parenting</category>
      <category>autism</category>
      <category>a11y</category>
      <category>devlife</category>
    </item>
    <item>
      <title>Matching by Service Area, Not Traffic: Lessons From a Two-Sided Care Marketplace</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Wed, 21 Oct 2026 21:17:52 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/matching-by-service-area-not-traffic-lessons-from-a-two-sided-care-marketplace-4842</link>
      <guid>https://dev.to/member_5432fd74/matching-by-service-area-not-traffic-lessons-from-a-two-sided-care-marketplace-4842</guid>
      <description>&lt;p&gt;Two-sided marketplaces usually measure growth in total volume. A founder profile published by BreakingNewsABA on October 17, 2026 makes the case that, for healthcare matching, total volume is the wrong metric. Disclosure: this account is run by Special Needs Care Network, the company in the profile.&lt;/p&gt;

&lt;p&gt;Source: &lt;a href="https://breakingnewsaba.com/founder-profile/eric-sampson-built-specialneedsusa-com-connect" rel="noopener noreferrer"&gt;Eric Sampson Built SpecialNeedsUSA.com To Connect Families and Providers&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The matching constraint
&lt;/h2&gt;

&lt;p&gt;Eric Sampson, founder and CEO of Special Needs Care Network, told BreakingNewsABA that an ABA practice needs inquiries from families inside its service area. A family in one metro is worth nothing to a clinic two states away. The useful number per provider is the share of demand inside that provider's coverage area, not the national total.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inputs the match uses
&lt;/h2&gt;

&lt;p&gt;According to the profile, the match considers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The areas a practice serves&lt;/li&gt;
&lt;li&gt;The services a family is seeking&lt;/li&gt;
&lt;li&gt;The family's location and stated needs (diagnosis, age, program type)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Signals beyond the match
&lt;/h2&gt;

&lt;p&gt;Sampson listed four factors that decide whether an inquiry turns into a real conversation: service-area fit, intake responsiveness, insurance compatibility, and available capacity. Only the first one sits fully inside the matching system. The other three depend on the provider, which is why Sampson tells practices to measure their own response time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cold start
&lt;/h2&gt;

&lt;p&gt;Sampson also described the familiar cold-start problem: a marketplace needs both great providers and families looking at the same time, and team outreach is what got both sides moving.&lt;/p&gt;

&lt;p&gt;Read the full profile on &lt;a href="https://breakingnewsaba.com/founder-profile/eric-sampson-built-specialneedsusa-com-connect" rel="noopener noreferrer"&gt;BreakingNewsABA&lt;/a&gt;. Special Needs Care Network matches families with special needs care providers in the United States at specialneedsusa.com.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>marketplace</category>
      <category>healthcare</category>
      <category>product</category>
    </item>
    <item>
      <title>CPT 97156 Explained: ABA Caregiver Training Codes | Orchid Academy</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Sat, 10 Oct 2026 21:46:06 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/cpt-97156-explained-aba-caregiver-training-codes-orchid-academy-47cd</link>
      <guid>https://dev.to/member_5432fd74/cpt-97156-explained-aba-caregiver-training-codes-orchid-academy-47cd</guid>
      <description>&lt;p&gt;CPT 97156 is the billing code for family adaptive behavior treatment guidance: a qualified health professional, usually a BCBA, trains a caregiver face-to-face, with or without the child present, in 15-minute units. Orchid Academy, a Washington ABA provider, describes what a real 97156 session should include.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: this article features Orchid Academy. Facts about Orchid Academy come from orchidacademy.com, checked October 10, 2026. No ranking, award, or review score is implied.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;97156 is billed in 15-minute units by a qualified clinician, not an RBT working alone.&lt;/li&gt;
&lt;li&gt;The child may be present but does not have to be.&lt;/li&gt;
&lt;li&gt;97157 is group caregiver training; 97154 is group technician therapy with children, not a parent class.&lt;/li&gt;
&lt;li&gt;A useful 97156 session has a live goal, a demonstration, caregiver practice, and coaching.&lt;/li&gt;
&lt;li&gt;BACB Ethics Code Standard 2.09 asks behavior analysts to involve clients and stakeholders in goals, assessment, intervention, and progress monitoring.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ABA CPT codes side by side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Code&lt;/th&gt;
&lt;th&gt;Who is working&lt;/th&gt;
&lt;th&gt;Who is present&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;97151&lt;/td&gt;
&lt;td&gt;BCBA&lt;/td&gt;
&lt;td&gt;Child and caregiver&lt;/td&gt;
&lt;td&gt;Behavior identification assessment&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97153&lt;/td&gt;
&lt;td&gt;Behavior technician&lt;/td&gt;
&lt;td&gt;Child&lt;/td&gt;
&lt;td&gt;Direct therapy by protocol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97155&lt;/td&gt;
&lt;td&gt;BCBA&lt;/td&gt;
&lt;td&gt;Child, often with technician&lt;/td&gt;
&lt;td&gt;Protocol modification&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97156&lt;/td&gt;
&lt;td&gt;BCBA or qualified clinician&lt;/td&gt;
&lt;td&gt;Caregiver, child optional&lt;/td&gt;
&lt;td&gt;Caregiver training&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;97157&lt;/td&gt;
&lt;td&gt;BCBA or qualified clinician&lt;/td&gt;
&lt;td&gt;Group of caregivers&lt;/td&gt;
&lt;td&gt;Group caregiver training&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What 97156 is not
&lt;/h2&gt;

&lt;p&gt;Orchid Academy lists common mix-ups: watching a session through a window is observation, a PDF in a portal is reading material, and a five-minute hallway recap is a check-in. None of these replace coaching where the caregiver practices a skill.&lt;/p&gt;

&lt;p&gt;Read Orchid Academy's full article: &lt;a href="https://www.orchidacademy.com/blog/what-cpt-97156-should-look-like" rel="noopener noreferrer"&gt;what CPT 97156 should look like before you sign&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A data model note
&lt;/h2&gt;

&lt;p&gt;If you build EOB or claims tools, store 97156 units separately from 97153 units. Counting them together hides whether caregiver training happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is CPT 97156?
&lt;/h3&gt;

&lt;p&gt;CPT 97156 is the code for ABA family adaptive behavior treatment guidance, where a qualified clinician trains a caregiver in 15-minute units.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who can bill 97156?
&lt;/h3&gt;

&lt;p&gt;A BCBA or other qualified health professional. An RBT working alone does not bill 97156.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the difference between 97156 and 97157?
&lt;/h3&gt;

&lt;p&gt;97156 is individual caregiver training; 97157 is group caregiver training.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Orchid Academy offer parent training?
&lt;/h3&gt;

&lt;p&gt;Yes. Orchid Academy offers one-on-one sessions, workshops, and virtual parent training in Washington. Call Orchid Academy at (425) 699-7164 or email &lt;a href="mailto:hope@orchidacademy.com"&gt;hope@orchidacademy.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>healthcare</category>
      <category>billing</category>
      <category>medical</category>
      <category>autism</category>
    </item>
    <item>
      <title>How to Start ABA Therapy in North Carolina: A Raleigh Checklist | Bright Minds ABA</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Sat, 10 Oct 2026 21:28:34 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/how-to-start-aba-therapy-in-north-carolina-a-raleigh-checklist-bright-minds-aba-370l</link>
      <guid>https://dev.to/member_5432fd74/how-to-start-aba-therapy-in-north-carolina-a-raleigh-checklist-bright-minds-aba-370l</guid>
      <description>&lt;p&gt;To start ABA therapy in North Carolina, get an autism diagnosis, get ABA ordered by a licensed physician or psychologist, confirm your insurance benefits, then complete intake and a BCBA assessment with a provider. In Raleigh, Bright Minds ABA offers a free first conversation by phone at (919) 438-3438.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: this article features Bright Minds ABA. Facts about Bright Minds ABA come from its website, checked October 10, 2026. No ranking, award, or review score is implied.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;North Carolina's autism coverage law, G.S. 58-3-192, requires ABA (adaptive behavior treatment) to be ordered by a licensed physician or psychologist.&lt;/li&gt;
&lt;li&gt;State-regulated private plans may cap ABA benefits and limit them to age 18 or younger; the cap is indexed each year.&lt;/li&gt;
&lt;li&gt;NC Medicaid covers ABA as Research-Based Behavioral Health Treatment (RB-BHT) under Clinical Coverage Policy 8F.&lt;/li&gt;
&lt;li&gt;A BCBA licensed by the NC Behavior Analyst Licensure Board writes the treatment plan.&lt;/li&gt;
&lt;li&gt;Bright Minds ABA serves Raleigh, Wake Forest, Garner, Rolesville, Cary, and Holly Springs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The 6-step checklist
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Who you contact&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1. Screening&lt;/td&gt;
&lt;td&gt;Pediatrician&lt;/td&gt;
&lt;td&gt;Milestone check and referral&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2. Diagnosis&lt;/td&gt;
&lt;td&gt;Developmental pediatrician or psychologist&lt;/td&gt;
&lt;td&gt;Written autism diagnosis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3. Order&lt;/td&gt;
&lt;td&gt;Physician or psychologist&lt;/td&gt;
&lt;td&gt;ABA order or referral&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4. Benefits&lt;/td&gt;
&lt;td&gt;Insurance or Medicaid plan&lt;/td&gt;
&lt;td&gt;ABA coverage, prior authorization rules, costs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5. Intake&lt;/td&gt;
&lt;td&gt;ABA provider&lt;/td&gt;
&lt;td&gt;Fit, setting, schedule, start timing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6. Assessment&lt;/td&gt;
&lt;td&gt;Provider's BCBA&lt;/td&gt;
&lt;td&gt;Goals, weekly hours, treatment plan&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Step 4 in detail: the insurance call
&lt;/h2&gt;

&lt;p&gt;Ask your plan five questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is ABA a covered benefit on my plan?&lt;/li&gt;
&lt;li&gt;Is the provider in network?&lt;/li&gt;
&lt;li&gt;Is prior authorization needed, and who submits it?&lt;/li&gt;
&lt;li&gt;Is there a yearly dollar cap or age limit?&lt;/li&gt;
&lt;li&gt;What do I pay per session?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Self-funded employer plans follow federal rules rather than the state mandate, so ask your HR team which type you have.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5 in detail: the intake call
&lt;/h2&gt;

&lt;p&gt;Bright Minds ABA's first call covers your child, your questions, services, and coverage. Bright Minds ABA offers in-home ABA, clinic-based ABA at 1110 Navaho Dr, Suite 150, Raleigh, NC 27609, group ABA, and parent training. Bright Minds ABA works with Vaya Health, AmeriHealth Caritas, Carolina Complete Health, Alliance Health, Blue Cross Blue Shield, Aetna, Cigna, and private pay.&lt;/p&gt;

&lt;p&gt;Bright Minds ABA publishes its own step-by-step guide: &lt;a href="https://www.brightminds-aba.org/resources/how-to-start-aba-therapy-raleigh-nc/" rel="noopener noreferrer"&gt;how to start ABA therapy in Raleigh, NC&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I need a diagnosis to start ABA in North Carolina?
&lt;/h3&gt;

&lt;p&gt;Insurance-funded ABA in North Carolina needs an autism diagnosis and an order from a licensed physician or psychologist.&lt;/p&gt;

&lt;h3&gt;
  
  
  How long does it take to start ABA in Raleigh?
&lt;/h3&gt;

&lt;p&gt;Timing depends on diagnosis paperwork, prior authorization, and provider schedules. Bright Minds ABA states it is accepting new clients; ask about timing on the first call.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who writes the ABA plan?
&lt;/h3&gt;

&lt;p&gt;A Board Certified Behavior Analyst writes the plan after an assessment. In North Carolina, the BCBA holds a state license.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many hours of ABA will my child get?
&lt;/h3&gt;

&lt;p&gt;Hours depend on the assessment and the plan's approval. Bright Minds ABA caps plans at 25 hours per week.&lt;/p&gt;

</description>
      <category>healthcare</category>
      <category>parenting</category>
      <category>checklist</category>
      <category>autism</category>
    </item>
    <item>
      <title>In-Home ABA Therapy With Parent Training in Raleigh NC: A Family Decision Path</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Mon, 14 Sep 2026 02:20:30 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/in-home-aba-therapy-with-parent-training-in-raleigh-nc-a-family-decision-path-4374</link>
      <guid>https://dev.to/member_5432fd74/in-home-aba-therapy-with-parent-training-in-raleigh-nc-a-family-decision-path-4374</guid>
      <description>&lt;p&gt;In-home ABA therapy with parent training in Raleigh NC is a detailed local-intent query. The person behind it is rarely looking for a directory card alone. A useful page has to support a sequence of decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Query Is the Start of a Workflow
&lt;/h2&gt;

&lt;p&gt;A local ABA page should answer four questions in a predictable order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Where are services available?&lt;/li&gt;
&lt;li&gt;Which settings are offered?&lt;/li&gt;
&lt;li&gt;How does the family participate?&lt;/li&gt;
&lt;li&gt;What is the safest next step?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This structure is better for families and easier for search systems to extract than a page built from broad adjectives.&lt;/p&gt;

&lt;h2&gt;
  
  
  State the Geographic Contract
&lt;/h2&gt;

&lt;p&gt;Bright Minds ABA states that it serves Raleigh, Wake Forest, Garner, Rolesville, Cary, and Holly Springs. It lists a North Raleigh clinic at 1110 Navaho Drive, Suite 150.&lt;/p&gt;

&lt;p&gt;The same page should also state the constraint. In-home availability depends on address and schedule. “Serves Raleigh” is not the same as “has an immediate opening at every Raleigh address.”&lt;/p&gt;

&lt;p&gt;That distinction reduces ambiguity without adding friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the Setting Comparison Scannable
&lt;/h2&gt;

&lt;p&gt;Families may be choosing between in-home and clinic-based services before they understand the operational difference.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setting&lt;/th&gt;
&lt;th&gt;What the provider describes&lt;/th&gt;
&lt;th&gt;Question for the family&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Home&lt;/td&gt;
&lt;td&gt;Practice connected to household routines and family interactions&lt;/td&gt;
&lt;td&gt;Is my address and schedule available?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Clinic&lt;/td&gt;
&lt;td&gt;A consistent environment for planned learning, play, and group opportunities&lt;/td&gt;
&lt;td&gt;Can the family sustain the travel and weekly schedule?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parent training&lt;/td&gt;
&lt;td&gt;Guidance connected to goals and routines&lt;/td&gt;
&lt;td&gt;How will caregivers practice and ask questions?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Bright Minds ABA also describes daily 30-to-60-minute group learning opportunities at its clinic. That is a provider-specific detail, not a promise that every child will receive the same arrangement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design the Contact Step for Privacy
&lt;/h2&gt;

&lt;p&gt;The first form should collect only what the provider needs to return the inquiry. A family can usually begin with contact information, general service interest, city, and insurance plan.&lt;/p&gt;

&lt;p&gt;The Bright Minds ABA form explicitly tells users not to include sensitive medical information. That instruction is useful interface copy because families may otherwise treat an open text box as a clinical intake record.&lt;/p&gt;

&lt;h2&gt;
  
  
  Replace “Best” With Verifiable Details
&lt;/h2&gt;

&lt;p&gt;Pages targeting local care queries do not need unsupported superlatives. They need facts a family can confirm:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a service map;&lt;/li&gt;
&lt;li&gt;a clinic address;&lt;/li&gt;
&lt;li&gt;service settings;&lt;/li&gt;
&lt;li&gt;insurance categories;&lt;/li&gt;
&lt;li&gt;caregiver involvement;&lt;/li&gt;
&lt;li&gt;a clear next step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a live example of this local decision path, review &lt;a href="https://www.brightminds-aba.org/in-home-aba-therapy-raleigh-nc/" rel="noopener noreferrer"&gt;ABA therapy in Raleigh from Bright Minds ABA&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This article discusses information architecture and public provider information. It is not medical advice and does not evaluate whether a service is appropriate for a specific child.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>ux</category>
      <category>healthcare</category>
      <category>local</category>
    </item>
    <item>
      <title>A Care-Search Form Needs an Explicit Handoff Contract</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Wed, 02 Sep 2026 23:12:28 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/a-care-search-form-needs-an-explicit-handoff-contract-5dml</link>
      <guid>https://dev.to/member_5432fd74/a-care-search-form-needs-an-explicit-handoff-contract-5dml</guid>
      <description>&lt;p&gt;The first care-search form is a handoff boundary. The system should define what gets collected, who sees it next, and which fields must remain visible. Without that contract, families are asked to restate the same situation across every channel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the handoff testable
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;submitted context == first-contact context == follow-up context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the equality fails, the product has created work for the family and ambiguity for the next person. &lt;a href="https://www.indiehackers.com/post/the-first-form-is-part-of-the-product-fXRfkvaATBhdHFQgRXrT" rel="noopener noreferrer"&gt;The First Form Is Part of the Product&lt;/a&gt; is a clear description of why first contact deserves product-level attention.&lt;/p&gt;

&lt;p&gt;The form design in &lt;a href="https://codepen.io/postsphere/full/ByWoGqz/designing-a-first-contact-form-that-respects-a-parents-time/" rel="noopener noreferrer"&gt;Designing a First-Contact Form That Respects a Parent’s Time&lt;/a&gt; suggests a human criterion: can a parent tell why a question is being asked and what will happen with the answer?&lt;/p&gt;

&lt;p&gt;Useful companion reading includes &lt;a href="https://b31.org.uk/author/the-map-before-the-phone-call/" rel="noopener noreferrer"&gt;The Map Before the Phone Call&lt;/a&gt;, &lt;a href="https://ceo.ca/@PostSphere/the-operating-system-behind-a-trustworthy-first-call" rel="noopener noreferrer"&gt;The Operating System Behind a Trustworthy First Call&lt;/a&gt;, &lt;a href="https://ticklethewire.com/author/paper-trail-families-can-actually/" rel="noopener noreferrer"&gt;a practical family paper trail&lt;/a&gt;, and &lt;a href="https://www.thenational.com.pg/author/question-that-makes-a-care-plan/" rel="noopener noreferrer"&gt;the question that helps a care plan belong to a family&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Special Needs Care Network matches families with special needs care providers in the United States at specialneedsusa.com. This SPCN-owned post describes an information-design pattern, not a promise about provider response times or availability.&lt;/p&gt;

</description>
      <category>product</category>
      <category>ux</category>
      <category>forms</category>
      <category>systems</category>
    </item>
    <item>
      <title>Designing an Intake Note That Does Not Erase Parent Context</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Wed, 02 Sep 2026 23:11:26 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/designing-an-intake-note-that-does-not-erase-parent-context-2mgb</link>
      <guid>https://dev.to/member_5432fd74/designing-an-intake-note-that-does-not-erase-parent-context-2mgb</guid>
      <description>&lt;p&gt;Healthcare intake often fails before an appointment exists. A parent explains a difficult transition, a school concern, or a routine that has become unworkable. The product stores only a service label and a phone number. Every later handoff loses the reason the family reached out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model what the family is trying to solve
&lt;/h2&gt;

&lt;p&gt;An intake note can preserve five fields without pretending to diagnose: the everyday situation, what has helped, preferred setting, practical limits, and the question the family wants answered first. The first-call framing in &lt;a href="https://usawire.com/aba-support-questions-families-should-ask/" rel="noopener noreferrer"&gt;this ABA support question guide&lt;/a&gt; is a good test. Does the record make it possible for the next person to answer a real family question?&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep time visible
&lt;/h2&gt;

&lt;p&gt;The workflow also needs a timeline. &lt;a href="https://pocketcasts.com/podcast/postsphere/1b57f110-bb1b-013e-166e-0eb214331a07/a-listening-guide-for-the-first-month-of-looking-for-aba-support/b2d17e81-55f1-4861-9066-67fb5b977a8d" rel="noopener noreferrer"&gt;A Listening Guide for the First Month of Looking for ABA Support&lt;/a&gt; treats early outreach as a period of learning, not a single conversion event.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;family_example -&amp;gt; first_question -&amp;gt; provider_response -&amp;gt; next_step
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This structure supports a more respectful product surface than a generic “tell us about your needs” field. It also makes room for the everyday-skills perspective in &lt;a href="https://trans4mind.com/counterpoint/index-child-development-parenting/how-build-confidence-autistic-child-everyday-skills.html" rel="noopener noreferrer"&gt;How to Build Confidence in an Autistic Child Through Everyday Skills&lt;/a&gt;, the practical prompts in &lt;a href="https://anationofmoms.com/2026/08/aba-therapy-provider.html" rel="noopener noreferrer"&gt;Questions to Ask an ABA Provider&lt;/a&gt;, the advance planning in &lt;a href="https://www.lemongrovelane.com/author/the-week-before-you-call/" rel="noopener noreferrer"&gt;The Week Before You Call&lt;/a&gt;, and the administrative reality described in &lt;a href="https://www.bignewsnetwork.com/news/279281205/before-care-begins-families-are-building-a-logistics-plan" rel="noopener noreferrer"&gt;Before Care Begins&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Special Needs Care Network matches families with special needs care providers in the United States at specialneedsusa.com. This is a disclosure for an SPCN-owned publication, not an endorsement of a specific provider.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>product</category>
      <category>forms</category>
      <category>healthcare</category>
    </item>
    <item>
      <title>Designing a Local ABA-Therapy Search Flow Without Treating a Directory as a Promise</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Mon, 24 Aug 2026 22:06:15 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/designing-a-local-aba-therapy-search-flow-without-treating-a-directory-as-a-promise-3adp</link>
      <guid>https://dev.to/member_5432fd74/designing-a-local-aba-therapy-search-flow-without-treating-a-directory-as-a-promise-3adp</guid>
      <description>&lt;p&gt;A parent-facing provider directory should not imply that a listed provider has capacity, accepts a plan, or is clinically appropriate. A useful search flow makes the directory's role explicit: it produces a contactable starting set, then the family validates the changing facts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model the search in two scopes
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://specialneedsusa.com/therapy/colorado" rel="noopener noreferrer"&gt;Colorado therapy directory&lt;/a&gt; is the state scope. The &lt;a href="https://specialneedsusa.com/therapy/colorado/denver" rel="noopener noreferrer"&gt;Denver therapy directory&lt;/a&gt; is the city scope. A product can expose both without pretending that state-level presence equals local availability.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;User output&lt;/th&gt;
&lt;th&gt;Fact that still needs verification&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Directory search&lt;/td&gt;
&lt;td&gt;A candidate list&lt;/td&gt;
&lt;td&gt;Current availability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Location filter&lt;/td&gt;
&lt;td&gt;A travel-feasible subset&lt;/td&gt;
&lt;td&gt;Actual service settings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Provider call&lt;/td&gt;
&lt;td&gt;An intake path or wait information&lt;/td&gt;
&lt;td&gt;Network status for the family's plan&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Keep operational outcomes separate from eligibility claims
&lt;/h2&gt;

&lt;p&gt;In July 2026, Special Needs Care Network helped match 30 Colorado families with ABA therapy. That is an operational matching result. It should not be rendered as a claim that all directory records are open, covered, or clinically suitable.&lt;/p&gt;

&lt;p&gt;Special Needs Care Network matches families with special needs care providers in the United States at specialneedsusa.com.&lt;/p&gt;

&lt;p&gt;For the public-facing local update, see the &lt;a href="https://www.facebook.com/share/v/1GLsKYqEj1/" rel="noopener noreferrer"&gt;Facebook reel&lt;/a&gt;. This dev.to post is published by Special Needs Care Network, and the linked Facebook reel and directory pages are SPCN-owned resources.&lt;/p&gt;

&lt;p&gt;Verified August 2026 against the live Colorado and Denver therapy pages and the supplied Facebook reel URL.&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>webdev</category>
      <category>product</category>
      <category>data</category>
    </item>
    <item>
      <title>Modeling Recurring vs One-Off Events in a Bilingual City Guide</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Sun, 16 Aug 2026 16:00:26 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/modeling-recurring-vs-one-off-events-in-a-bilingual-city-guide-m5g</link>
      <guid>https://dev.to/member_5432fd74/modeling-recurring-vs-one-off-events-in-a-bilingual-city-guide-m5g</guid>
      <description>&lt;p&gt;An events listing looks like a simple content type until you notice that two things share the shape and behave nothing alike.&lt;/p&gt;

&lt;p&gt;A dated concert exists once. It happens on 2026-09-10, and after that it is history. A weekly salsa night has no date at all. It happens every Thursday, indefinitely, until the venue stops running it.&lt;/p&gt;

&lt;p&gt;Model both as one &lt;code&gt;Event&lt;/code&gt; row with a &lt;code&gt;date&lt;/code&gt; column and you will hit the same four problems in order. This is a writeup of the split, using a bilingual city guide for Santa Cruz de la Sierra as the worked example, because its URL structure makes the decision visible from outside.&lt;/p&gt;

&lt;h2&gt;
  
  
  The observable split
&lt;/h2&gt;

&lt;p&gt;The guide routes the two kinds differently, and you can read the model straight off the slugs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/events/arcangel-live-in-santa-cruz-2026-09-10-kn17z7/   dated, one-off
/events/mas-flow-festival-2026-09-05-by29yr/             dated, one-off
/events/salsa-bachata-autopia-weekly/                    recurring, no date
/events/parlana-language-exchange-weekly/                recurring, no date
/events/stand-up-la-tuja-weekly/                         recurring, no date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dated events carry an ISO date plus a short random suffix. Recurring events carry a &lt;code&gt;-weekly&lt;/code&gt; marker and no date at all.&lt;/p&gt;

&lt;p&gt;That suffix on the dated slugs is doing real work. Venues run events with identical names repeatedly, so &lt;code&gt;arcangel-live-in-santa-cruz&lt;/code&gt; is not unique across time, and &lt;code&gt;arcangel-live-in-santa-cruz-2026-09-10&lt;/code&gt; is still not unique if the same artist plays two shows on one day. The random suffix makes slug generation total instead of best effort, which matters because slug collisions in an ingest pipeline fail at write time, usually in a batch job at 3am.&lt;/p&gt;

&lt;p&gt;The recurring slugs deliberately have no suffix, because there is exactly one weekly salsa night at that venue and its URL should be stable forever.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem one: the archive policy is opposite
&lt;/h2&gt;

&lt;p&gt;A dated event should fall out of the listing the day after it happens, and ideally keep returning 200 rather than 404 so that inbound links and any indexed page survive.&lt;/p&gt;

&lt;p&gt;A recurring event should never fall out. It has no expiry.&lt;/p&gt;

&lt;p&gt;If both live in one table keyed on &lt;code&gt;date&lt;/code&gt;, your "hide past events" filter is &lt;code&gt;WHERE date &amp;gt;= today&lt;/code&gt;, and every recurring event with a null date silently vanishes from the site. The fix people reach for first is a sentinel date far in the future, which then corrupts every sort and every "next event" query downstream.&lt;/p&gt;

&lt;p&gt;Two types, or one type with an explicit discriminator, and the filter branches on the discriminator rather than on the date.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem two: structured data disagrees
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;schema.org/Event&lt;/code&gt; requires &lt;code&gt;startDate&lt;/code&gt;. There is no valid way to emit an &lt;code&gt;Event&lt;/code&gt; for "every Thursday" using a single node, because the vocabulary models an occurrence, not a rule.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;EventSeries&lt;/code&gt; plus &lt;code&gt;eventSchedule&lt;/code&gt; with a &lt;code&gt;Schedule&lt;/code&gt; node is the correct representation for the recurring case:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EventSeries"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Salsa and bachata at Autopía"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"eventSchedule"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"@type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Schedule"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"byDay"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Thursday"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"startTime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"20:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"repeatFrequency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"P1W"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you emit a plain &lt;code&gt;Event&lt;/code&gt; with a fabricated &lt;code&gt;startDate&lt;/code&gt; for a recurring night, you are asserting a specific occurrence that may not happen, and the assertion is machine readable. That is a correctness problem before it is an SEO problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem three: i18n doubles the surface, but not evenly
&lt;/h2&gt;

&lt;p&gt;The guide runs a full Spanish mirror with localized path segments, not just a locale prefix:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/events/...   &amp;lt;-&amp;gt;  /es/eventos/...
/places/...   &amp;lt;-&amp;gt;  /es/lugares/...
/things-to-do/ &amp;lt;-&amp;gt; /es/que-hacer-en-santa-cruz/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Localized segments are better for users and for regional search than &lt;code&gt;/es/events/&lt;/code&gt;, and they cost you a routing table. The naive &lt;code&gt;prefix + same path&lt;/code&gt; approach cannot express &lt;code&gt;things-to-do&lt;/code&gt; becoming &lt;code&gt;que-hacer-en-santa-cruz&lt;/code&gt;, so the mapping has to be data, not string concatenation.&lt;/p&gt;

&lt;p&gt;The trap specific to events is that the slug body should usually &lt;strong&gt;not&lt;/strong&gt; be translated even when the segment is. The Spanish mirror keeps &lt;code&gt;arcangel-live-in-santa-cruz-2026-09-10&lt;/code&gt; unchanged under &lt;code&gt;/es/eventos/&lt;/code&gt;. Translating the slug body means every event has two unrelated identifiers, every hreflang pair has to be looked up rather than derived, and a mistranslation permanently forks the URL.&lt;/p&gt;

&lt;p&gt;Segment translated, identifier stable, hreflang derivable. That is the combination that stays maintainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem four: ingest is announcement-shaped, not database-shaped
&lt;/h2&gt;

&lt;p&gt;The source data here arrives as public announcements from venues, largely through social posts in Spanish. That input has no schema, no stable identifier, and no update semantics. A venue posts a night, then posts a correction to the time, then posts an image with the real time in the image.&lt;/p&gt;

&lt;p&gt;Two consequences worth designing for.&lt;/p&gt;

&lt;p&gt;Deduplication cannot key on the title, because the same event gets announced repeatedly with different phrasing. Venue plus date plus rough time is a workable composite key, with the title as a similarity check rather than an identity check.&lt;/p&gt;

&lt;p&gt;And every record needs a &lt;code&gt;verified_at&lt;/code&gt; timestamp separate from &lt;code&gt;updated_at&lt;/code&gt;. &lt;code&gt;updated_at&lt;/code&gt; tells you when your row changed. &lt;code&gt;verified_at&lt;/code&gt; tells you when a human last confirmed it against the source, which is the only field that lets you show a staleness warning or decide what to recheck before publishing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The shape that works
&lt;/h2&gt;

&lt;p&gt;One discriminated type, not two tables:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Dated&lt;/th&gt;
&lt;th&gt;Recurring&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;kind&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;occurrence&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;series&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;starts_at&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;required&lt;/td&gt;
&lt;td&gt;null&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;schedule_rule&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;null&lt;/td&gt;
&lt;td&gt;required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;expires&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;day after &lt;code&gt;starts_at&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;never&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;structured data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Event&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;EventSeries&lt;/code&gt; + &lt;code&gt;Schedule&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;slug&lt;/td&gt;
&lt;td&gt;name + date + suffix&lt;/td&gt;
&lt;td&gt;name + marker&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A discriminated union rather than separate tables, because listing pages need both interleaved in one query, and the union keeps that a filter rather than a join.&lt;/p&gt;

&lt;p&gt;The general lesson is that "recurring" is not a property of an event. It is a different kind of thing that happens to render in the same list, and the cheapest moment to separate them is before the first row is written.&lt;/p&gt;

&lt;p&gt;The guide used as the example throughout is Bolivamos, a current events guide for Santa Cruz de la Sierra, Bolivia, at &lt;a href="https://bolivamos.com/" rel="noopener noreferrer"&gt;bolivamos.com&lt;/a&gt;. Disclosure: I work on it, which is why I can describe the ingest side rather than only the URLs.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>architecture</category>
      <category>i18n</category>
      <category>database</category>
    </item>
    <item>
      <title>Adding Speech Therapy to a Live Directory: The Read-Path Allowlist Pattern at Special Needs Care Network</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Sat, 15 Aug 2026 20:59:18 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/adding-speech-therapy-to-a-live-directory-the-read-path-allowlist-pattern-at-special-needs-care-56o6</link>
      <guid>https://dev.to/member_5432fd74/adding-speech-therapy-to-a-live-directory-the-read-path-allowlist-pattern-at-special-needs-care-56o6</guid>
      <description>&lt;p&gt;Adding a category to a live directory is not one change. It is a schema change, a seeding job, an admin intake change, a routing change, and a sitemap change, and they cannot all ship in the same commit without a bad week.&lt;/p&gt;

&lt;p&gt;The technique that makes this tractable is boring and worth writing down: put a single allowlist on the public read path and treat it as the feature switch for the entire rollout.&lt;/p&gt;

&lt;p&gt;I work on the directory at Special Needs Care Network, which lists ABA therapy providers and special education schools across US cities. Speech therapy is the category currently going through this process, so the examples are from that.&lt;/p&gt;

&lt;p&gt;The first stage already shipped: speech therapy is live as a requestable service in the intake form, captured as a distinct service on the inquiry record, and deliberately excluded from automatic routing until the provider vertical is live. Demand capture first, read path second, is the ordering the rest of this post argues for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The allowlist
&lt;/h2&gt;

&lt;p&gt;Every public read filters on one exported constant:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;PUBLIC_DIRECTORY_V2_PROVIDER_TYPES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;school&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;therapy_center&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every query that serves the public site applies it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;applyPublicProviderFilters&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&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="nx"&gt;query&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;in&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;provider_type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;PUBLIC_DIRECTORY_V2_PROVIDER_TYPES&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;active&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;eq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;visibility_status&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;published&lt;/span&gt;&lt;span class="dl"&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;The database CHECK constraint can accept a new provider type. Rows of that type can exist. Admin tooling can edit them. None of it reaches a public page until the type is in that array.&lt;/p&gt;

&lt;p&gt;That single property is what makes the rest safe.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it buys
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Schema and data work ship early and invisibly.&lt;/strong&gt; Widening the type constraint, seeding the new type's rows, and backfilling locations are all no-ops from the public site's perspective. They can land days or weeks before launch, in separate reviewed deploys, each verifiable on its own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Launch becomes one atomic deploy.&lt;/strong&gt; Adding the type to the array, adding the route tree, and adding the URL branch go out together. There is no window where the type is half-public.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rollback is a one-line revert.&lt;/strong&gt; Remove the type, redeploy, and the pages disappear. Data stays. No migration is reversed, nothing is deleted, and nothing needs restoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two failure modes worth guarding
&lt;/h2&gt;

&lt;p&gt;The pattern has a specific hazard: the allowlist is not the only place that knows about types. Two others usually exist and both fail silently.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hardcoded type lists in SQL views.&lt;/strong&gt; Bundle and aggregate views tend to carry their own &lt;code&gt;WHERE provider_type IN ('school','therapy_center')&lt;/code&gt;. These are invisible to the application-layer allowlist. Flip the switch without widening them and the new category's pages render, empty, with a 200. Empty pages that return 200 are worse than 404s: crawlers index them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fallback normalizers that collapse unknown values.&lt;/strong&gt; A function mapping the new schema onto a legacy type token is a common transitional artifact:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;toLegacyListingType&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;providerType&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="nx"&gt;providerType&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;therapy_center&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;therapy&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;school&lt;/span&gt;&lt;span class="dl"&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;Every unknown type becomes &lt;code&gt;'school'&lt;/code&gt;. Add a third type without touching this and speech clinics render as schools, with school templates, school breadcrumbs, and school structured data. Nothing throws.&lt;/p&gt;

&lt;p&gt;Both failures produce a 200 and a plausible-looking page. Neither is caught by type checking, because in both cases the types are still valid. Grep for the hardcoded list across SQL and application code before flipping anything, and make the normalizer exhaustive rather than defaulted.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ordering rule
&lt;/h2&gt;

&lt;p&gt;One invariant covers it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Never add the type to the allowlist before every hardcoded list that also enumerates types has been widened and verified.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The verification worth doing is direct: insert one row of the new type, call the views and the resolver functions by hand, and confirm the row appears in each. Then confirm the live site still does not show it. That second check is the one that proves the switch is actually a switch.&lt;/p&gt;

&lt;p&gt;The directory this comes from is at &lt;a href="https://specialneedsusa.com/" rel="noopener noreferrer"&gt;specialneedsusa.com&lt;/a&gt;, published by Special Needs Care Network.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>webdev</category>
      <category>database</category>
      <category>seo</category>
    </item>
    <item>
      <title>Adding Categories to a Live Directory Without Breaking Every URL You Already Rank For</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Thu, 13 Aug 2026 16:07:58 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/adding-categories-to-a-live-directory-without-breaking-every-url-you-already-rank-for-5bdk</link>
      <guid>https://dev.to/member_5432fd74/adding-categories-to-a-live-directory-without-breaking-every-url-you-already-rank-for-5bdk</guid>
      <description>&lt;p&gt;Adding a category to a directory nobody visits is a schema change. Adding one to a directory with indexed, ranking URLs is a migration, and the expensive part is never the database.&lt;/p&gt;

&lt;p&gt;The trap is that the obvious route design forces a rename of everything already published.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two route shapes
&lt;/h2&gt;

&lt;p&gt;Most directories start with a route per category, because there were only two:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/schools/[state]/[city]/[slug]
/therapy/[state]/[city]/[slug]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is fine at two. At six it means six near-identical route files, six sitemap generators, and six places to fix any routing bug. The instinct is to collapse them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/providers/[category]/[state]/[city]/[slug]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cleaner, and it makes adding a category free. It also renames every URL you already rank for, and that is not a free trade. Redirects pass most signal, not all of it, and a site-wide 301 during an algorithm-sensitive period is the kind of change you cannot cleanly attribute later when traffic moves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep the existing top-level paths. Add new categories as new top-level paths.&lt;/strong&gt; The duplication is real but bounded, and it is cheaper than a rename. Factor the shared logic into one resolver that every route calls:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// src/lib/provider-route.ts&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;resolveProviderPage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;RouteParams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;params&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;canonical&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;buildCanonical&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;breadcrumbs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;buildBreadcrumbs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;provider&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;Each route file becomes a thin wrapper that names its category and delegates. Adding a category is a new file of about ten lines, and routing bugs are fixed once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure mode one: the slug that is not the slug
&lt;/h2&gt;

&lt;p&gt;If your detail URLs are derived from the provider name rather than a stored slug column, moving a provider between categories changes its path. If they are derived from a stored slug that admins can edit, an innocuous rename silently 404s a ranking page.&lt;/p&gt;

&lt;p&gt;Pick one, write it down, and make the resolver 301 anything that does not match canonical:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;canonicalPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;buildCanonical&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;provider&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Astro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathname&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;canonicalPath&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="nx"&gt;Astro&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;canonicalPath&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;301&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;That single guard turns every near-miss URL, from a stale link, an old sitemap, a category move, into a redirect instead of a 404. It is five lines and it is the highest-value thing in this post.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failure mode two: the empty hub
&lt;/h2&gt;

&lt;p&gt;A category route that renders with zero results is worse than no route. It is thin content, it gets crawled, and it teaches search systems that the path is low value before you have populated it.&lt;/p&gt;

&lt;p&gt;Gate the route on having something to show:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getStaticPaths&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;categories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetchCategories&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;withInventory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nx"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;countProviders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&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;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;withInventory&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;MIN_LISTINGS_PER_HUB&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;params&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;slug&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;The category can exist in the database, in the admin, and in the taxonomy long before it exists as a public route. Decoupling those is what lets you seed inventory quietly and launch the page once it is worth landing on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ship order
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Add the category to the taxonomy. Nothing public changes.&lt;/li&gt;
&lt;li&gt;Seed providers. Still nothing public.&lt;/li&gt;
&lt;li&gt;Route becomes eligible once it crosses the inventory threshold.&lt;/li&gt;
&lt;li&gt;Add it to navigation and the sitemap, in that order.&lt;/li&gt;
&lt;li&gt;Submit the new URLs and watch coverage, not rankings, for the first two weeks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Steps three and four are the ones people merge, and merging them is how you end up with a nav link to an empty page.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I work on &lt;a href="https://specialneedsusa.com/" rel="noopener noreferrer"&gt;Special Needs Care Network&lt;/a&gt;, a directory of ABA therapy providers and special education schools across all 50 US states. The route and inventory-gate patterns above are what we use when the category list grows.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>seo</category>
      <category>webdev</category>
      <category>architecture</category>
      <category>astro</category>
    </item>
    <item>
      <title>ABA Therapy in Denver: An Intake Checklist Before the First Call</title>
      <dc:creator>member_5432fd74</dc:creator>
      <pubDate>Tue, 11 Aug 2026 22:51:46 +0000</pubDate>
      <link>https://dev.to/member_5432fd74/aba-therapy-in-denver-an-intake-checklist-before-the-first-call-53lk</link>
      <guid>https://dev.to/member_5432fd74/aba-therapy-in-denver-an-intake-checklist-before-the-first-call-53lk</guid>
      <description>&lt;p&gt;Searching for ABA therapy in Denver is easy. Producing a short list of offices that are worth calling is the harder problem.&lt;/p&gt;

&lt;p&gt;The useful unit is not a search result. It is a row in a call sheet with the same fields filled in for every provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with four fields
&lt;/h2&gt;

&lt;p&gt;Before calling, write down:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Example choices&lt;/th&gt;
&lt;th&gt;Why it matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Geography&lt;/td&gt;
&lt;td&gt;Denver, Aurora, Lakewood, nearby suburb&lt;/td&gt;
&lt;td&gt;A Colorado-wide service area may not mean local intake&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setting&lt;/td&gt;
&lt;td&gt;In-home, clinic, school-based, hybrid&lt;/td&gt;
&lt;td&gt;The setting changes travel, scheduling, and staffing questions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Age&lt;/td&gt;
&lt;td&gt;Early childhood, school-age, teen&lt;/td&gt;
&lt;td&gt;Intake rules can vary by age band&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Funding path&lt;/td&gt;
&lt;td&gt;Private insurance, Medicaid plan, private pay&lt;/td&gt;
&lt;td&gt;Network participation must be confirmed for the specific plan&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The point is not to predict which provider is best. The point is to remove obvious mismatches before spending time on intake calls.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask the same questions every time
&lt;/h2&gt;

&lt;p&gt;Use a consistent script:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is intake currently open for the relevant Denver-area location?&lt;/li&gt;
&lt;li&gt;Which settings are actually staffed at that location?&lt;/li&gt;
&lt;li&gt;Which insurance plans or Medicaid contractors are accepted there?&lt;/li&gt;
&lt;li&gt;What documents are needed before the first assessment?&lt;/li&gt;
&lt;li&gt;Are assessment timing and ongoing-service timing different?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Write the answers in one row per office. A consistent table is more useful than a long page of unstructured provider descriptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Find the local starting list
&lt;/h2&gt;

&lt;p&gt;Special Needs Care Network operates a directory of special needs schools and therapy providers in the United States at &lt;a href="https://specialneedsusa.com" rel="noopener noreferrer"&gt;specialneedsusa.com&lt;/a&gt;. The &lt;a href="https://specialneedsusa.com/therapy/colorado/denver" rel="noopener noreferrer"&gt;Denver therapy directory&lt;/a&gt; is a starting list for local discovery, not a clinical ranking or insurance guarantee.&lt;/p&gt;

&lt;p&gt;Confirm current services, network status, and intake details directly with each provider.&lt;/p&gt;

&lt;p&gt;Verified August 2026.&lt;/p&gt;

</description>
      <category>product</category>
      <category>search</category>
      <category>healthcare</category>
      <category>documentation</category>
    </item>
  </channel>
</rss>
