The XML could be minimized to this:
<names>
<name1>
<childName1/>
<childName2/>
</name1>
<name2>
<childName1/>
<childName2/>
</name2>
</names>
And the CSV to this:
name1 ChildName1
name1 ChildName2
name2 ChildName1
name2 ChildName2
with a JSON serialization like this:
{"names":
[
{
"name1":
[
{
"childName1":""
},
{
"childName2":""
}
]
},
{
"name2":
[
{
"childName1":""
},
{
"childName2":""
}
]
}
]
}
In a row-oriented fashion, the XML could be:
<names>
<name1 name="ChildName1|ChildName2">
<name2 name="ChildName1|ChildName2">
</names>
And the corresponding CSV:
name1 ChildName1|ChildName2
name2 ChildName1|ChildName2
And the corresponding JSON:
{"names": [{"name1":"ChildName1|ChildName2"},{"name2":"ChildName1|ChildName2"}]}
.plan
======================================================================
EPIC
Modern Craigslist as a fully static system with RSS ingest only
SVG assets only
no JS
no forms
no tables
no CDN
no server side logic except cron
navigation via sitemap only
LLM acceleration for SVG creation and cron debugging
----------------------------------------------------------------------
USER STORY 1
As a system designer
I want all content served as static HTML files
so that the site has zero runtime logic and maximum reliability
Requirements
- static HTML only
- no dynamic endpoints
- no server side request handling
- no JS
- no forms
- no tables
----------------------------------------------------------------------
USER STORY 2
As a content ingest maintainer
I want all listings to arrive through RSS feeds
so that ingest is deterministic and GUI free
Requirements
- RSS is the only input channel
- cron fetches RSS
- cron validates entries
- cron normalizes fields
- cron writes listings to static storage
----------------------------------------------------------------------
USER STORY 3
As a pipeline engineer
I want cron to regenerate all pages and assets
so that the site remains fresh without any live server logic
Requirements
- cron rebuilds listing pages
- cron rebuilds category slices
- cron rebuilds time slices
- cron rebuilds price band slices
- cron regenerates sitemap
- cron publishes atomically
----------------------------------------------------------------------
USER STORY 4
As an information architect
I want the sitemap to be the only navigation surface
so that the UI remains minimal and universally accessible
Requirements
- single sitemap file
- nested details sections allowed
- nested links allowed
- no other navigation elements
- no menus
- no forms
- no JS driven routing
----------------------------------------------------------------------
USER STORY 5
As a visual designer
I want all image assets to be SVG
so that the site is modern and resolution independent
Requirements
- SVG for icons
- SVG for category glyphs
- SVG for region markers
- SVG for price band markers
- SVG for time band timelines
- SVG for listing thumbnails when possible
- SVG must be hand written or generated by code
- no raster images
----------------------------------------------------------------------
USER STORY 6
As a procedural graphics engineer
I want SVG assets to be generated without any GUI
so that asset creation is deterministic and automatable
Requirements
- hand written SVG allowed
- SVG generated by scripts allowed
- SVG generated by templates allowed
- SVG generated by geometric rules allowed
- no GUI drawing tools
- no proprietary editors
----------------------------------------------------------------------
USER STORY 7
As a pipeline maintainer
I want LLMs to accelerate SVG creation
so that asset production is fast and consistent
Requirements
- LLM generates SVG from natural language descriptions
- LLM generates bulk SVG sets from taxonomies
- LLM linting for SVG normalization
- LLM debugging for SVG geometry issues
----------------------------------------------------------------------
USER STORY 8
As a pipeline debugger
I want LLMs to accelerate cron pipeline debugging
so that failures are diagnosed quickly without server logs or GUIs
Requirements
- LLM analyzes cron logs
- LLM reasons about pipeline ordering
- LLM inspects directory trees
- LLM validates static HTML
- LLM validates RSS
- LLM validates SVG
- LLM proposes self healing strategies
----------------------------------------------------------------------
USER STORY 9
As a performance engineer
I want the site to outperform modern JS heavy sites
so that users experience instant loads and zero failures
Requirements
- static files served directly by HTTP server
- no CDN required
- no JS bundles
- no hydration
- no client rendering
- no API calls
- minimal CSS
- pure HTML and SVG
----------------------------------------------------------------------
USER STORY 10
As a security engineer
I want the attack surface to be minimal
so that the site is nearly impossible to exploit
Requirements
- no JS
- no forms
- no cookies
- no sessions
- no dynamic endpoints
- no SQL
- no authentication
- read only document tree
----------------------------------------------------------------------
PROCEDURAL SVG DESIGN SYSTEM
Global geometry rules
- viewBox is 0 0 64 64
- grid uses multiples of 2 or 4
- stroke width is 2
- rounded corners use rx 4 and ry 4
- icons centered at 32 32
Style rules
- monochrome palette
- stroke is black
- fill is none
- stroke linejoin is round
- stroke linecap is round
- text avoided unless required
Icon taxonomy
- category icons
- state icons
- facet icons
Template patterns
- base icon template
- category icon template
- badge template
Procedural generation rules
- script inputs are category name and facet type
- script outputs are deterministic SVG files
- geometry uses circles rectangles lines polylines and simple paths
- no randomness allowed
LLM integration
- LLM generates SVG from descriptions
- LLM generates bulk SVG sets
- LLM lints SVG
- LLM debugs geometry
----------------------------------------------------------------------
RSS INGEST PIPELINE
RSS ingest rules
- RSS is the only input channel
- cron fetches feeds
- cron validates XML
- cron extracts fields
- cron writes normalized listing data
- cron triggers rebuild of affected pages
RSS normalization rules
- title extracted
- description extracted
- link extracted
- pubDate extracted
- category extracted
- all fields sanitized
- all fields written to static storage
----------------------------------------------------------------------
```python
#!/usr/bin/env python3
# ======================================================================
# SAMPLE XML DATA
# fenced inside this python file for literate programming clarity
# ======================================================================
#
# ```xml
# <rss version="2.0">
# <channel>
# <title>sample feed</title>
# <item>
# <title>sample listing one</title>
# <link>https://example.org/listing1</link>
# <description>first sample description</description>
# <pubDate>Mon, 01 Jan 2024 00:00:00 GMT</pubDate>
# <category>cars</category>
# </item>
# <item>
# <title>sample listing two</title>
# <link>https://example.org/listing2</link>
# <description>second sample description</description>
# <pubDate>Tue, 02 Jan 2024 00:00:00 GMT</pubDate>
# <category>bicycles</category>
# </item>
# </channel>
# </rss>
# ```
#
# ======================================================================
# XSL STYLESHEET
# rss_extract.xsl
# fenced inside this python file for literate programming clarity
# ======================================================================
#
# ```xsl
# <?xml version="1.0"?>
# <xsl:stylesheet version="1.0"
# xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
#
# <xsl:output method="text"/>
#
# <xsl:template match="/">
# <xsl:for-each select="rss/channel/item">
# <xsl:text>title: </xsl:text>
# <xsl:value-of select="title"/>
# <xsl:text> </xsl:text>
#
# <xsl:text>link: </xsl:text>
# <xsl:value-of select="link"/>
# <xsl:text> </xsl:text>
#
# <xsl:text>pubdate: </xsl:text>
# <xsl:value-of select="pubDate"/>
# <xsl:text> </xsl:text>
#
# <xsl:text>category: </xsl:text>
# <xsl:value-of select="category"/>
# <xsl:text> </xsl:text>
# </xsl:for-each>
# </xsl:template>
#
# </xsl:stylesheet>
# ```
#
# ======================================================================
import urllib.request
import libxslt
import libxml2
def extract_fenced_block(tag):
lines = []
capture = False
fence = "# ```" + tag
endfence = "# ```"
with open(__file__, "r") as f:
for line in f:
if line.strip() == fence:
capture = True
continue
if capture:
if line.strip() == endfence:
break
lines.append(line.lstrip("# ").rstrip("\n"))
return "\n".join(lines)
def main():
xml_string = extract_fenced_block("xml")
xsl_string = extract_fenced_block("xsl")
xml_doc = libxml2.parseDoc(xml_string)
xsl_doc = libxml2.parseDoc(xsl_string)
style = libxslt.parseStylesheetDoc(xsl_doc)
result = style.applyStylesheet(xml_doc, {})
output = style.saveResultToString(result)
print(output)
style.freeStylesheet()
xml_doc.freeDoc()
result.freeDoc()
if __name__ == "__main__":
main()