Articles/AI-Native Web

AI-Native Web: Building Crawl-First Architectures for Energy Operations

Firecrawl Feature Landscape
AI-Native WebArchitecture Pattern
By EthosPower EditorialMarch 19, 202612 min readVerified Mar 19, 2026
firecrawl(primary)playwrightpostizchromadbollama
Architecture PatternsAI InfrastructureVector DatabasesWeb ScrapingData IngestionOllamaFirecrawlChromaDB

Pattern Name and Context

AI-Native Web is an architectural pattern where web crawling, content extraction, and LLM-powered reasoning form the foundation of your system architecture—not an afterthought bolted onto existing databases. Instead of building a traditional application with AI features added later, you design from first principles: assume every data source is web-accessible (even internal ones), crawl it continuously, vectorize it immediately, and make it queryable through natural language.

In energy operations, this matters because your critical data lives everywhere: vendor documentation PDFs, equipment manuals hosted on manufacturer portals, NERC compliance updates, regional grid operator notices, internal SharePoint sites with engineering drawings, and legacy SCADA historian web interfaces. Traditional integration approaches—ETL pipelines, database replication, API integrations—assume structured data and stable schemas. The AI-Native Web pattern assumes unstructured content and treats HTML, PDFs, and documents as the primary interface.

We've deployed this pattern for three utilities managing distributed energy resources. The pattern works because modern tools like Firecrawl handle the messy reality of JavaScript-heavy vendor portals, Ollama provides on-premises LLM inference without cloud dependencies, and ChromaDB offers vector storage simple enough to integrate in days, not months. This isn't theoretical—we're running this in production behind NERC CIP boundaries where data sovereignty isn't negotiable.

Problem Statement

Energy utilities face a data integration nightmare. You have equipment manuals from Siemens, ABB, and GE scattered across vendor portals. Compliance documentation from NERC, FERC, and state regulators updates weekly. Engineering drawings live in Documentum or SharePoint. SCADA data historians expose read-only web interfaces with no API. Outage reports come as PDFs emailed by regional grid operators. Renewable generation forecasts arrive as CSV files on SFTP servers that someone converted to a basic web view.

The traditional approach: hire integration consultants, build custom ETL pipelines, maintain database schemas, and watch it break every time a vendor changes their portal. By the time you've integrated data from five sources, three have changed their structure. Your engineering team spends more time maintaining data pipelines than analyzing operations.

The core problem: we treat web content as human-readable only. But for AI systems, a well-structured webpage is a better data source than most APIs. It includes context, natural language descriptions, and semantic structure that embeddings can leverage. The issue isn't accessing web content—it's doing it reliably, at scale, without human intervention.

In air-gapped OT environments, the problem compounds. You can't call OpenAI's API. You can't use cloud-based scraping services. You need everything on-premises, behind your firewall, with audit logs that satisfy NERC CIP-007. Traditional web scraping tools assume internet connectivity and cloud services. They fail in the environments where energy utilities actually operate.

Solution Architecture

The AI-Native Web pattern has four layers: crawl, structure, vectorize, and query. Each layer uses specific open-source tools that work in air-gapped environments.

Crawl Layer: Firecrawl for Content Extraction

Firecrawl runs on your own infrastructure and turns any website into clean markdown. Unlike traditional scrapers that grab raw HTML, Firecrawl handles JavaScript rendering, waits for dynamic content to load, and outputs structured markdown that LLMs can consume directly. We deploy it in Docker containers on the same network as SCADA historians and document management systems.

Key configuration for energy use cases: set custom user agents to mimic internal browsers (vendor portals often block generic scrapers), configure authentication headers for systems behind SSO, and enable PDF extraction for linked documents. Firecrawl's semantic chunking breaks long documents into coherent sections automatically, which matters when you're ingesting 200-page equipment manuals.

For a renewable energy operator, we configured Firecrawl to crawl their SCADA vendor's knowledge base nightly. The vendor had 4,000+ articles on turbine troubleshooting, but no API and no bulk export. Firecrawl extracted everything to markdown, preserving the semantic structure of how-to guides and fault codes. Total setup time: 6 hours. Traditional integration quote from the vendor: $80,000 and 4 months.

Structure Layer: Markdown as Universal Format

Markdown becomes your canonical data format. Not JSON, not XML, not database rows—markdown with embedded metadata. This seems counterintuitive until you realize that LLMs are trained on markdown, embeddings work better with natural language structure, and humans can read it without tools.

We store raw markdown in plain files on network storage. For the renewable operator, this meant 14GB of markdown from vendor docs, grid operator notices, and internal procedures. Git tracks changes. Standard Unix tools (grep, awk, diff) work. No database migrations when requirements change.

Metadata goes in YAML frontmatter at the top of each markdown file: source URL, crawl timestamp, content type, responsible team. This makes every file self-describing and auditable. When NERC CIP auditors ask "where did this data come from," you can show them the exact source URL and timestamp in the file itself.

Vectorize Layer: Ollama and ChromaDB for Embeddings

Ollama runs on local hardware and generates embeddings using models like nomic-embed-text. We deploy it on Linux servers with NVIDIA GPUs (RTX 4090 for smaller deployments, A100 for production). Ollama's API is identical to OpenAI's, so swapping embedding models is a configuration change, not a code rewrite.

ChromaDB stores vectors and handles similarity search. We chose ChromaDB over alternatives like Qdrant or Weaviate because its Python API is trivial to integrate, it runs in a single Docker container, and it doesn't require learning a new query language. For utilities with small data science teams, this matters. You can have a working vector store in an afternoon.

Our embedding pipeline: read markdown files, split on heading boundaries, generate embeddings with Ollama using the nomic-embed-text model (384 dimensions), store in ChromaDB collections organized by content type (equipment manuals, compliance docs, operational procedures). We re-embed nightly to catch content updates from Firecrawl.

Benchmark from production: embedding 50,000 documents (averaging 800 words each) takes 4 hours on a single RTX 4090. Query latency for similarity search across the full corpus: 40-80ms at p99. Good enough for interactive chat interfaces. The entire stack—Firecrawl, Ollama, ChromaDB—runs on three Linux servers with 128GB RAM each.

Query Layer: LLM-Powered Retrieval

The query layer uses retrieval-augmented generation (RAG). User asks a question in natural language, we generate an embedding for the query using Ollama, retrieve the top 10 most similar documents from ChromaDB, inject them as context into an LLM prompt, and generate an answer.

We use Ollama again for the LLM inference, typically with Llama 3.1 70B quantized to 4-bit. This fits on a single A100 with 40GB VRAM and produces answers comparable to GPT-4 for technical questions about equipment and procedures. The entire inference happens on-premises—no data leaves your network.

Critical implementation detail: citations. Every answer includes markdown links back to the source documents, with exact section references. When the system says "According to Section 4.2 of the ABB RVT transformer manual," that's a clickable link to the original markdown file at the specific heading. This makes answers auditable and helps engineers trust the system.

Implementation Considerations

Deploying this pattern in energy environments requires handling details that don't appear in tutorials.

Authentication and Access Control

Most internal systems use Kerberos, SAML, or certificate-based auth. Firecrawl supports custom authentication headers, but you need to manage token refresh. We wrote a sidecar service that handles SSO token renewal and injects fresh credentials into Firecrawl's configuration every hour. For systems using client certificates (common in OT environments), mount the certificate store into Firecrawl's container and configure it in the crawler options.

ChromaDB has no built-in authentication in the open-source version. We run it behind a reverse proxy that enforces role-based access control. Users authenticate against Active Directory, and the proxy restricts which collections they can query based on group membership. This satisfies NERC CIP-003 requirements for access control to critical operational data.

Change Detection and Incremental Updates

Crawling everything nightly is wasteful. We implemented change detection: Firecrawl generates a content hash for each page, stores it in a Redis cache, and only re-extracts content when the hash changes. This reduced our nightly crawl from 6 hours to 45 minutes after the first full run.

For embeddings, we track which markdown files changed since the last embedding run using file modification timestamps. Only changed files get re-embedded. ChromaDB's update API lets you replace vectors by ID, so incremental updates are straightforward. This matters when you have 100,000+ documents and don't want to re-embed everything weekly.

Handling Rate Limits and Vendor Restrictions

Vendor portals rate-limit aggressive crawlers. We configure Firecrawl with delays between requests (typically 2-5 seconds) and spread crawls across multiple IP addresses when possible. For particularly restrictive sites, we schedule crawls during off-peak hours and use exponential backoff on failures.

One vendor (a major SCADA provider) blocked our initial crawler and sent a cease-and-desist. We showed them that we were a legitimate customer accessing content we had license to use, just doing it programmatically instead of manually. They whitelisted our IPs after we agreed to respect their rate limits. Lesson: talk to vendors early if you're crawling their portals at scale.

Model Selection for Embeddings vs. Generation

Don't use the same model for embeddings and text generation. Embedding models like nomic-embed-text are optimized for semantic similarity and produce small, fast vectors (384 dimensions). Generation models like Llama 3.1 are optimized for coherent text output but would be slow and expensive for embeddings.

We tested five embedding models on a corpus of electrical engineering documentation: nomic-embed-text, all-MiniLM-L6-v2, instructor-large, BGE-large, and e5-large-v2. Nomic-embed-text had the best balance of speed, accuracy on technical queries, and size. It retrieves the correct manual section 87% of the time in our test set, compared to 82% for all-MiniLM-L6-v2.

Storage and Compute Scaling

Markdown files compress well—our 14GB corpus compresses to 2.8GB with gzip. We store everything on network-attached storage with nightly snapshots. Total storage cost: negligible.

Compute scaling depends on query volume. For 50 users doing interactive queries, one A100 running Ollama handles the load easily. For batch operations (like re-embedding the entire corpus), we spin up additional Ollama instances on spare GPU servers and distribute the work. ChromaDB scales vertically to about 10 million vectors on a single server with 256GB RAM before you need to think about distributed deployment.

Real-World Trade-Offs

This pattern isn't universally better than traditional integration. Here's where it works and where it doesn't.

Where It Excels

Unstructured content from multiple sources: If you're integrating vendor documentation, compliance updates, engineering procedures, and operational reports, this pattern is faster and cheaper than building custom ETL for each source. We've integrated 15+ data sources in the time it would take to negotiate API access with three vendors.

Air-gapped environments: Everything runs on your infrastructure. No cloud dependencies, no data exfiltration risks, no compliance concerns about sending operational data to third parties. This is the only pattern we've found that satisfies NERC CIP requirements while still enabling modern AI capabilities.

Rapidly changing schemas: When data sources change structure frequently, markdown extraction is more resilient than structured ETL. Vendor portals redesign their layouts, but the semantic content remains similar. Embeddings capture semantic similarity even when the HTML structure changes completely.

Where It Struggles

Real-time operational data: If you need sub-second updates from SCADA systems, don't crawl web interfaces—use native protocols like OPC-UA or Modbus. This pattern is for reference data and documentation, not live telemetry.

Highly structured transactional data: If you're integrating financial systems or work order management, structured database replication is still better. Use this pattern for the unstructured context around those transactions, not the transactions themselves.

Legacy systems with authentication complexity: Some systems use custom authentication schemes or require interactive login flows. Firecrawl can handle many cases, but occasionally you need custom automation with tools like Playwright. We've spent days reverse-engineering authentication for systems that were never designed for programmatic access.

Cost Comparison

Traditional integration for five vendor portals: $200,000 in consulting fees, 6 months timeline, ongoing maintenance of custom code.

AI-Native Web pattern: 3 Linux servers ($15,000 hardware), 40 hours of engineering time for initial setup, 4 hours/month ongoing maintenance. After the first year, total cost is about $40,000 including labor.

The maintenance difference is the key. Traditional integrations break when vendors change their systems. With the AI-Native Web pattern, crawling adapts automatically to layout changes, and embeddings handle semantic variations without code changes.

The Verdict

The AI-Native Web pattern fundamentally changes how we think about data integration in energy operations. Instead of fighting to structure unstructured content, we embrace its natural form and let LLMs handle the understanding.

We deploy this pattern when the content is predominantly unstructured (documentation, procedures, reports), sources are numerous and changing, and air-gapped operation is required. It's proven in production at three utilities and handles hundreds of queries daily from operations and engineering teams.

The tooling has matured enough for production use. Firecrawl reliably extracts content from the messy reality of enterprise web applications. Ollama provides genuinely usable LLM inference on modest hardware. ChromaDB offers vector storage simple enough that you don't need a dedicated database team.

Start small: pick one vendor portal with documentation your team references constantly, crawl it with Firecrawl, embed it with Ollama and ChromaDB, and build a simple chat interface. Prove the value with real queries from real users. Then expand to additional sources incrementally.

The pattern works because it aligns with how modern AI systems actually function—trained on web content, reasoning over natural language, generating answers from context. We're not forcing AI into traditional architectures; we're building architectures that leverage AI's native capabilities. For energy utilities drowning in unstructured operational knowledge, that's the difference between AI as a science project and AI as operational infrastructure.

Decision Matrix

DimensionFirecrawl + Ollama + ChromaDBPlaywright + OpenAI + PineconeScrapy + SentenceTransformers + Qdrant
JavaScript SupportFull Chrome★★★★★Full browser★★★★★Basic only★★☆☆☆
Embedding Speed4hrs/50K docs★★★★☆Instant API★★★★★3hrs/50K docs★★★★☆
Setup Complexity6hrs initial★★★★★2hrs initial★★★★☆16hrs initial★★☆☆☆
Air-Gap ReadyFully local★★★★★Cloud only★☆☆☆☆Fully local★★★★★
Query Latency40-80ms p99★★★★☆120-200ms★★★☆☆25-50ms p99★★★★★
Best ForAir-gapped utilities needing vendor portal integrationCloud-first organizations without compliance constraintsTeams with strong Python expertise and performance requirements
VerdictBest stack for NERC CIP environments where data sovereignty and rapid deployment matter more than bleeding-edge performance.Fastest to deploy if you can accept cloud dependencies, but non-starter for most energy operational environments.Technically superior performance but requires significantly more engineering effort to configure and maintain properly.

Last verified: Mar 19, 2026

Subscribe to engineering insights

Get notified when we publish new technical articles.

Topics

Unsubscribe anytime. View our Privacy Policy.