Housing
Pausing construction in the Dallas neighborhood has put people out of work and left some with only part of their home complete.
By Jacob Vaughn
August 9, 2024
In 2022, a group called Save Elm Thicket advocated for zoning requirements in the neighborhood that some developers are now violating.Jacob Vaughn
We have a favor to ask
We're in the midst of our summer membership campaign, and we have until August 25 to raise $5,500. Your contributions are an investment in our election coverage – they help sustain our newsroom, help us plan, and could lead to an increase in freelance writers or photographers. If you value our work, please make a contribution today to help us reach our goal.
Progress to goal
$5,500
$2,600
Audio By Carbonatix
`,`
Related
- In Texas, It's Hardest to Save Money in Dallas According to New Report
`,`
Related
- 3 North Texas Cities Named 'Best Places for Renters to Live'
`,`
Related
- 'Gut Wrenching': There Are Thousands of Homeless Students Across DFW
`,`
Related
- These Dallas Suburbs Among the Wealthiest in US
`,`
Related
- Readers Respond: Sleeping Outside Is Illegal in Dallas
`,`
Related
- Dallas Says It's Illegal To Sleep While Homeless, Supreme Court Agrees
`,`
Related
- New Affordable Housing Project To Support LGBTQIA+ Seniors in Dallas
`,`
Related
- Residents in a Rural Corner of Dallas Struggle to Get Big-City Services
`,`
Related
- Experts Say Dallas Has a Squatter Problem and State Lawmakers Are Ready to Evict
` ];
Danny Le is nearly $600,000 in the hole on a duplex the city said he can’t keep building. He showed up to the site of his project recently to find a stop-work order on the house he’s been working on for months. He and several others who were building in Dallas’ Elm Thicket-Northpark neighborhood find themselves in similar situations.
This is all because in 2022, some changes were approved for the Elm Thicket-Northpark neighborhood near Love Field to preserve its historic character and prevent displacement of residents. A group called Save Elm Thicket helped advocate for the changes. The freedmen town neighborhood was expanded, and new height restrictions were imposed. The area also got a revised land-use map, reduced lot coverage and new roof design standards.
Apparently, some at the permitting office didn’t get the memo because earlier this year, the city began receiving complaints about construction violations on new homes and duplexes in the neighborhood. The local online publication Candy’s Dirt broke the story last week.
In mid-June, Interim City Manager Kimberly Bizor Tolbert consolidated the planning and urban design department with the development services department. This is when city staff began looking into the neighborhood complaints, Robin Bentley, assistant city manager, said in a memo on Friday.The city did not respond to our request for comment about the zoning controversy in Elm Thicket-Northpark.
“I don’t have the money to fix it or tear it down." – Danny Le, developer tweet this
Bentley said in the memo that city staff were using outdated zoning information between Oct. 12, 2022, and June 2, 2023, and some projects were approved in error. Dallas began looking at 29 projects that had been approved for the neighborhood and found only 10 met current zoning requirements. Five had noncompliant plans but hadn’t started construction. The rest were in various stages of development.
Jonathan Maples, president of the Elm Thicket-Northpark Neighborhood Association, told D Magazine that he began noticing homes in the neighborhood that took up too much space. “Somewhere along the line, someone must have dropped the ball,” he said
Last week, the city began issuing stop-work orders and placing holds on sites with violations. Now, city staff are working on reviewing all additional permits in the neighborhood that were issued between Oct. 12, 2022, and June 2, 2023. They hope to complete this review no later than Sept. 30. The City Council will be notified when the review is complete.
City staff is also looking into systemic changes that could prevent such errors from occurring in the future. Tolbert recently formed the City Action Strike Team to work with other departments in situations like this. The team will review how the city updates its permitting systems following an ordinance change like the one that happened in Elm Thicket-Northpark a couple of years ago.
Jesse Moreno, the City Council member for this part of town, didn’t respond to the Observer’s requests for comment about the building problems in the neighborhood. However, he alluded to it briefly at Monday’s Economic Development Committee meeting during a discussion about the city’s comprehensive land use plan called ForwardDallas.
He asked how accurate the information a developer gets can be if they’re working with multiple city departments. Emily Liu, Dallas’ new planning and development director, said the merging of the planning and urban design department with the development services department should mitigate some of these errors.
It makes no difference to Le, who isn’t sure what his next steps will be on the home he was building for himself. His home is too tall, it takes up too much of the lot and the roof he was planning to build isn’t compliant with current zoning regulations. In addition, all the workers he employed to help construct the home are out of work because the development has been put on pause.
“I don’t have the money to fix it or tear it down,” Le said. “It’s just not feasible.”
His only avenue for getting things back on track is to go through Dallas’ Board of Adjustment, but that could take months and there’s no guarantee that it will side with him over the neighborhood zoning requirements. It’s unfortunate, he said, because the project is halfway complete. “The city’s saying ‘Hey, we’re going to fix this moving forward,’” Le said. “They acknowledge that they messed up what happened in the past, but for the people that are affected, they don’t have a solution.”
It’s all a big mess, he said. “I’m just sitting here and I’m seeing multiple projects on the same street being shut down and it’s kind of absurd,” Le said. “If you messed up, fix it. But they’re like ‘There’s nothing we can do to fix it.’”
') let lineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() if (jQuery(element).prop('tagName').match(/HIDDEN/i) !== null) { jQuery(element).children('div').last().css({ marginBottom: `${lineHeight*2}px` }); } else { jQuery(element).css({ marginTop: `${lineHeight*2}px`, marginBottom: `${lineHeight}px` }); } // const insertionBlockClass = `fdn-paragraph-insertion-block`; const styleElementHook = `fdn-paragraph-insertion-styles`; jQuery(element).addClass(insertionBlockClass); if (jQuery(`[${styleElementHook}]`).length === 0) { jQuery('div.fdn-content-body, div #storyBody').append('
') const paragraphLineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() const styleElement = jQuery(`
`); const styleText = ` div.fdn-content-body br+.${insertionBlockClass}:not([hidden]), div #storyBody br+.${insertionBlockClass}:not([hidden]) { margin-top: ${paragraphLineHeight*2}px; margin-bottom: ${paragraphLineHeight}px; } div.fdn-content-body br+.${insertionBlockClass}[hidden] > div:last-of-type, div #storyBody br+.${insertionBlockClass}[hidden] > div:last-of-type { margin-bottom: ${paragraphLineHeight*2}px; } ` styleElement.text(styleText); jQuery('head').append(styleElement); } // } } jQuery(element).insertBefore(this.paragraphEndNodes[index]); } else { console.warn('Foundation.ParagraphTool.insertElemenAt: invalid insertion index', index); } } this.insertElemenAtEnd = function (element) { if (this.paragraphEndNodes.length) { let lastNode = this.getNodeAtIndex(this.paragraphEndNodes.length -1); if (this.isDoubleBrParagraphBreak(lastNode) || this.isBrParagraphBreakBeforeBlockElement(lastNode)) { if (jQuery(element).get(0).tagName.match(/SCRIPT/i) !== null) { jQuery('
').insertAfter(this.paragraphEndNodes[index]); jQuery('
').insertAfter(this.paragraphEndNodes[index]); } else { jQuery('div.fdn-content-body, div #storyBody').append('
') let lineHeight = jQuery('[line-height-check]').get(0).clientHeight; jQuery('[line-height-check]').remove() if (jQuery(element).prop('tagName').match(/HIDDEN/i) !== null) { jQuery(element).children('div').last().css({ marginBottom: `${lineHeight*2}px` }); } else { jQuery(element).css({ marginTop: `${lineHeight*2}px`, marginBottom: `${lineHeight}px` }); } } } } this.bodyContainer.append(element); } this.getNodeAtIndex = function (index) { return this.paragraphEndNodes[index]; } }
`); } var paragraphCount = myParagraphTool.getParagraphEndNodeCount(); // No need to insert if there aren't enough paragaphs if (paragraphCount >= parseInt(item.requiredCountToDisplay)) { // Matches specific paragraph insertion indexes if (item.insertPoint.match(/^\d+$/) !== null) { var insertIndex = parseInt(item.insertPoint) - 1; // Insert within content if (insertIndex < paragraphCount) { myParagraphTool.insertElemenAtIndex(componentElement, insertIndex); } // Append to the end if the insert point is beyond the paragraph count else { myParagraphTool.insertElemenAtEnd(componentElement) } } // Matches for 1/2, 1/4, 2/3, 5/6, etc else if (item.insertPoint.match(/^[1223456]\/[23456]$/) !== null) { var fractionMatch = new RegExp(/^([123456])(?:\/)([23456]$)/); var fractionPart = parseInt(item.insertPoint.match(fractionMatch)[1]); var fractionWhole = parseInt(item.insertPoint.match(fractionMatch)[2]); var fractionValue = fractionPart / fractionWhole; var fractionIndex = Math.floor(myParagraphTool.paragraphEndNodes.length * fractionValue) - 1; myParagraphTool.insertElemenAtIndex(componentElement, fractionIndex); } // Matches for every Nth insertion point else if (item.insertPoint.match(/^\d*th$/i) !== null) { var intervalIndex = parseInt(item.insertPoint.match(/^(\d*)th$/i)[1]); var startingIndex = parseInt(item.startingPoint) - 1; var insertionMax = parseInt(item.maxInsertions) || 100; var insertionCount = 0; for (var i = startingIndex; i < myParagraphTool.paragraphEndNodes.length && insertionCount < insertionMax; i++) { if ((i - startingIndex) % intervalIndex === 0) { let currentNode = myParagraphTool.getNodeAtIndex(i); const clonedComponent = componentElement.clone(); myParagraphTool.insertElemenAtIndex(clonedComponent, i); insertionCount++; } } } } }); Foundation.Content['20134766'].setupInlineComponents = function () { return true; }; if (typeof callback === 'function') { callback(); } }, 200); } Foundation.Content['20134766'].previewInsertionPoints = function () { var myParagraphTool = Foundation.Content['20134766'].paragraphTool myParagraphTool.paragraphEndNodes.each((index, item) => { const insertionPointPlaceholder = jQuery(`
`) myParagraphTool.insertElemenAtIndex(insertionPointPlaceholder, index); }); return 'Paragraph insertion placeholders applied.'; }