Frontend Development

Chapter 15
AI-Assisted Development and Emerging Frontends

Certificate in Full stack programming
Frontend Development   •   Certificate

AI-Assisted Development and Emerging Frontends

Introduction

Frontend development is changing from a discipline concerned mainly with browser markup, styling, and interaction into a broader practice of designing intelligent, distributed, installable, and accessible user experiences. AI coding assistants can generate code and tests; progressive web applications (PWAs) can operate with limited connectivity; WebAssembly can execute compiled languages in the browser; server-side rendering (SSR) and edge delivery can improve initial response times; and headless architectures separate presentation from content and commerce services.

These developments create opportunity, but they do not remove the need for professional judgement. Generated code may contain security defects, incorrect assumptions, inaccessible interaction patterns, licensing risks, or APIs that do not exist. Emerging frontend technologies also introduce operational complexity. A responsible developer therefore treats tools and generated output as aids to reasoning, not substitutes for requirements analysis, testing, verification, and accountability.

This chapter presents practical foundations for using AI responsibly and for understanding major frontend architectures that are shaping contemporary web development.

Learning Objectives

By the end of this chapter, a learner should be able to:

  1. Explain appropriate and inappropriate uses of AI in frontend development.
  2. Verify AI-generated code, tests, documentation, and accessibility recommendations.
  3. Describe how PWAs, WebAssembly, SSR, edge delivery, and headless systems work.
  4. Compare client-side rendering, server-side rendering, static generation, and hybrid approaches.
  5. Apply an accessibility, privacy, security, and performance-oriented development process.
  6. Evaluate emerging web-platform capabilities and make proportionate technology choices.

1. AI as a Development Assistant

AI-assisted development uses machine-learning systems to support activities such as code completion, natural-language search, refactoring, test generation, documentation, debugging, design exploration, and accessibility review. These systems commonly predict likely text or code from a prompt and its surrounding context. They do not possess a guaranteed understanding of the application’s requirements or runtime environment.

A useful professional model is human-led, AI-assisted development:

  • The developer defines the problem, constraints, and acceptance criteria.
  • The AI proposes an implementation or analysis.
  • The developer inspects, executes, tests, and revises the result.
  • Automated and human checks provide evidence of correctness.
  • The team records important decisions and risks.

This model differs from accepting generated code without review. The more consequential the feature—authentication, payments, personal data, permissions, or safety-related information—the stronger the verification must be.

1.1 Appropriate uses

AI can be useful for:

  • explaining unfamiliar frontend APIs;
  • producing a first draft of repetitive component or CSS code;
  • suggesting test cases, including boundary and error cases;
  • converting a stated design into a semantic HTML outline;
  • identifying possible accessibility issues for human inspection;
  • summarising documentation supplied by the developer;
  • proposing alternative implementations and their trade-offs; and
  • generating comments or documentation that are then checked against the code.

AI is particularly effective when the task has clear inputs, outputs, and constraints. For example, a developer might ask for a TypeScript function that formats a date using a specified locale, followed by unit tests for invalid and boundary values.

1.2 Inappropriate reliance

AI should not be treated as an authority for:

  • security decisions without threat modelling and testing;
  • legal or licensing interpretation;
  • claims about current browser support unless checked against authoritative documentation;
  • medical, financial, or safety-critical user guidance;
  • accessibility conformance based only on automated output; or
  • code whose provenance, data handling, or dependencies cannot be identified.

A fluent explanation can be wrong. A generated test can merely repeat the implementation’s mistake. A proposed package can be abandoned or malicious. Verification is therefore a core engineering activity, not an optional final step.

2. A Verification Workflow for AI-Generated Output

A practical verification workflow has six stages.

Stage 1: Specify the task

State the user need, inputs, outputs, constraints, supported browsers, performance expectations, accessibility requirements, and failure behaviour. Vague prompts encourage plausible but unsuitable output.

For example, “Create an accessible modal” is incomplete. A better specification states that the modal must have a labelled title, trap focus while open, return focus to the triggering control, close with Escape, expose an appropriate dialog role, and remain usable with keyboard and screen-reader interaction.

Stage 2: Inspect the proposal

Read every generated line that will enter the system. Look for:

  • unsafe HTML insertion or unvalidated URLs;
  • missing error handling;
  • state updates that cause stale or race-prone behaviour;
  • unnecessary dependencies;
  • hard-coded secrets or personal data;
  • inaccessible controls and incorrect ARIA attributes;
  • assumptions about browser APIs; and
  • complexity that is disproportionate to the requirement.

Stage 3: Check authoritative sources

Compare APIs and behaviour with standards, browser documentation, framework documentation, and the project’s dependency policy. Do not infer that an API exists merely because generated code uses a convincing name.

Stage 4: Execute and test

Run formatting, linting, type checking, unit tests, integration tests, end-to-end tests, and security checks appropriate to the feature. Test in real browsers and at relevant viewport sizes. Generated tests are candidate tests; they do not replace independent test design.

Stage 5: Review quality attributes

Assess usability, accessibility, performance, privacy, maintainability, and internationalisation. Automated checks are valuable for finding some defects but cannot establish the complete quality of an experience.

Stage 6: Record provenance and decisions

For professional work, retain the requirement, significant prompts or source material where policy requires it, review decisions, test evidence, and dependency licences. Teams should define what information may be entered into external AI services. Source code, credentials, customer records, and confidential business information should not be disclosed to an unapproved service.

A compact verification matrix

OutputTypical riskMinimum verification
Component codeIncorrect state or insecure data handlingCode review, type checking, tests
CSS/layoutPoor responsiveness or contrastMultiple viewports, visual review, contrast check
Test codeTesting the same mistaken assumptionIndependent cases and mutation-oriented thinking
Accessibility adviceMissing interaction or semantic contextKeyboard and assistive-technology testing
Package recommendationVulnerability, licence, or maintenance riskRegistry, advisories, licence and activity review
DocumentationIncorrect API or unsupported claimCompare with authoritative references

3. AI and Accessibility Support

Accessibility is a property of the whole user experience, not a label added by a tool. AI can suggest semantic elements, accessible names, keyboard interactions, colour alternatives, captions, and test scenarios. It can also identify likely missing labels or heading problems. However, accessibility depends on context, user goals, platform behaviour, and interaction quality.

A sound process begins with semantic HTML. Use a native button for an action, a link for navigation, form labels for controls, headings that reflect document structure, and lists for lists. Native semantics often provide keyboard and assistive-technology behaviour without additional code. ARIA should enhance semantics when necessary, not replace appropriate native elements.

A developer should verify at least the following:

  • every interactive control has a meaningful accessible name;
  • keyboard users can reach and operate all functions;
  • focus is visible and follows a logical order;
  • dynamic updates are communicated when appropriate;
  • text and controls have sufficient contrast;
  • content remains usable when enlarged or reflowed;
  • images have appropriate alternative text, or are marked decorative;
  • errors are identified in text and associated with their fields; and
  • motion, timing, and media have suitable alternatives or controls.

Automated tools are good at detecting some missing attributes and contrast problems, but they cannot reliably judge whether alternative text conveys the intended meaning or whether a workflow is understandable. Manual keyboard testing, zoom/reflow testing, and testing with assistive technologies remain important. Conformance claims should identify the standard and version used, the tested scope, and known limitations rather than implying universal accessibility.

4. Progressive Web Applications

A progressive web application is a web application that uses platform capabilities to provide an app-like experience while retaining the reach of the web. Typical characteristics include responsive design, secure delivery through HTTPS, a web app manifest, and a service worker.

The manifest supplies metadata such as the application name, icons, start URL, display preference, and theme colours. It supports installation experiences but does not itself make an application offline-capable.

A service worker is a script that operates separately from the page and can intercept selected network requests, manage caches, and receive events such as push notifications where supported. It enables strategies including:

  • cache first: use cached content first, then update or fall back to the network;
  • network first: prefer fresh network content, using a cache when the network fails;
  • stale while revalidate: return cached content quickly while updating it in the background; and
  • network only: use the network for resources that must be current.

No strategy is universally correct. A news headline, an application shell, and a payment request have different freshness and safety requirements. Caching a payment mutation or sensitive response without careful design can cause serious problems.

Service workers require secure contexts, ordinarily HTTPS, with local development commonly treated as a secure exception. They are subject to scope and lifecycle rules. Updates can be confusing if an old worker continues controlling pages; release processes should therefore handle versioning, activation, cache cleanup, and rollback deliberately.

PWAs should be designed for intermittent connectivity rather than promising that every function works offline. The interface should communicate synchronisation status, preserve user work safely, handle conflicts, and avoid presenting stale information as current. Storage quotas, eviction, private browsing behaviour, browser differences, and device capabilities also limit guarantees.

5. Rendering Models and Server-Side Rendering

A frontend can render content in several ways.

  • Client-side rendering (CSR): the browser downloads JavaScript and constructs much of the interface there. It supports rich interaction but may delay meaningful content on slower devices or networks.
  • Server-side rendering (SSR): the server generates HTML for a request. The browser can display useful content earlier, after which client code may “hydrate” it to add interaction.
  • Static site generation (SSG): HTML is generated before requests, often during a build. It is efficient and cacheable for content that changes relatively infrequently.
  • Incremental or hybrid rendering: some pages are generated statically, some dynamically, and selected content is revalidated or streamed. Modern frameworks commonly combine these approaches.

SSR does not automatically mean faster or better. Server computation, data access, HTML size, hydration cost, cache configuration, and geographic distance all affect the result. A page may display HTML quickly yet remain unresponsive while large client-side code hydrates. Developers should measure actual user experience rather than selecting a rendering model by fashion.

SSR also changes the security model. Data fetched on the server must be authorised correctly, secrets must never be sent to the browser accidentally, and user-specific responses must not be shared through an incorrectly configured cache. The server must escape untrusted content and protect request-handling endpoints against common attacks.

6. WebAssembly

WebAssembly (Wasm) is a portable, compact binary instruction format designed for safe execution in a web environment and other runtimes. Languages such as Rust, C, C++, and Go can compile selected code to Wasm. JavaScript remains important for browser APIs and application orchestration, while Wasm is useful for computation-intensive or language-specific modules.

Potential applications include image and audio processing, CAD, games, scientific visualisation, cryptographic operations implemented by reputable libraries, and reuse of mature native-language algorithms. Wasm is not automatically faster. Performance depends on compilation, data transfer between JavaScript and Wasm, memory allocation, algorithm choice, download size, and device capability. Small interface tasks often remain simpler and more efficient in JavaScript.

A Wasm module runs within browser security boundaries; it does not receive unrestricted operating-system access. It must still be integrated carefully. Inputs crossing the JavaScript–Wasm boundary should be validated, modules should be sourced and updated securely, and large files should not be copied unnecessarily. Developers should measure end-to-end performance, including download, compilation, and communication overhead, rather than benchmark only the inner function.

7. Edge Delivery and Distributed Frontends

Traditional web deployment often sends requests to a central origin. Edge delivery places caching, request processing, or rendering nearer to users in geographically distributed locations. Content delivery networks (CDNs) commonly cache static assets at edge points of presence. Edge functions can execute limited request logic near the user, subject to runtime, storage, and execution constraints.

Benefits may include lower latency, reduced origin load, improved resilience, and faster delivery of cacheable content. However, distributed deployment introduces challenges:

  • cache invalidation and stale content;
  • differences between edge and full server runtimes;
  • regional data-residency obligations;
  • observability across many locations;
  • cold starts or resource limits; and
  • accidental caching of private responses.

Caching decisions should distinguish public, shared content from personalised or confidential content. Cache keys, variation headers, invalidation procedures, and failure behaviour must be explicit. Sensitive user data should not be placed in a shared cache merely because doing so improves speed.

8. Headless and Composable Architectures

In a traditional coupled content-management system, content management and page presentation are closely integrated. A headless system separates the content or commerce backend from the frontend. The backend exposes content through an API, while one or more clients—web, mobile, kiosk, or digital signage—consume it.

A typical headless request path is:

  1. An editor creates or updates structured content.
  2. The content service validates and stores it.
  3. The frontend requests content through an API or build process.
  4. The frontend maps structured data to accessible components.
  5. A browser receives statically generated, server-rendered, or client-rendered output.

Advantages include channel flexibility, independent deployment, and the ability to select specialised frontend technologies. Costs include API latency, preview complexity, authentication design, duplicated responsibilities, schema governance, and greater operational coordination. “Composable” systems may combine several independently managed services, but each additional service increases integration and failure surfaces.

A headless architecture should define content models, versioning, cache policy, failure fallbacks, preview workflows, ownership, and service-level expectations. Frontend developers must not assume that API content is safe: content should be treated as untrusted input and rendered with appropriate escaping and validation.

9. Choosing an Architecture

Architecture selection should begin with user and organisational requirements. Useful questions include:

  • Does the experience need search-visible HTML immediately?
  • How frequently does content change?
  • Which functions must work offline?
  • Is personalisation required at request time?
  • Are users on low-bandwidth devices or distant regions?
  • What data must remain private or within a jurisdiction?
  • Does the team have the skills to operate a distributed system?
  • What are the accessibility, observability, and recovery requirements?
RequirementOften suitable approachImportant caution
Mostly stable public contentSSG with CDN deliveryPlan rebuilds and invalidation
Personalised, search-relevant pagesSSR or hybrid renderingProtect private caches
Intermittent connectivityPWA techniquesDefine safe offline behaviour
Heavy computationWebAssembly candidateMeasure boundary and startup costs
Multiple content channelsHeadless architectureGovern schemas and APIs
Global public assetsEdge/CDN deliveryVerify cache correctness

These are starting points, not rules. A small site may be harmed by unnecessary architectural complexity, while a global application may require several techniques together.

10. Performance, Security, and Responsible Governance

Performance should be evaluated with field evidence and controlled tests. Useful measures include loading milestones, interaction responsiveness, layout stability, transferred bytes, and resource timing. A single laboratory score cannot represent every user’s experience. Test representative devices, networks, browsers, and authenticated states.

Security fundamentals remain applicable across new architectures: validate inputs, encode output, use secure session handling, apply least privilege, protect secrets, update dependencies, configure content security controls where appropriate, and monitor failures. AI-generated code is not exempt from these obligations.

Responsible AI governance includes:

  • privacy: do not disclose confidential code or personal data to unauthorised systems;
  • provenance: understand whether generated material may reproduce licensed or sensitive content;
  • accountability: identify the human responsible for accepting a change;
  • transparency: document material AI assistance where organisational or academic policy requires it;
  • bias and inclusion: inspect generated language, imagery, and design recommendations for exclusionary assumptions; and
  • auditability: retain enough evidence to explain important decisions and reproduce tests.

Regulatory obligations vary by jurisdiction and domain. Accessibility, privacy, consumer protection, copyright, records management, and sector-specific rules may all apply. Developers should seek organisational or legal guidance where the stakes are high rather than treating a general-purpose AI answer as legal advice.

11. Emerging Web-Platform Directions

The platform continues to evolve through standards and browser implementation rather than through one central product roadmap. Important directions include:

  • improved web components and custom elements for reusable, framework-independent components;
  • more capable storage, background processing, and device integration, subject to permission and privacy controls;
  • streaming and partial rendering to deliver useful interface regions progressively;
  • stronger privacy-preserving measurement and identity patterns;
  • improved support for installability, offline workflows, and cross-device experiences; and
  • closer integration between JavaScript, WebAssembly, graphics, media, and machine-learning runtimes.

A future-facing developer should distinguish an established standard from an experimental proposal. Check implementation status, permissions, progressive-enhancement options, polyfill costs, accessibility behaviour, and fallback paths. Build the essential experience with broadly supported web technologies, then enhance it when capability detection confirms that enhancement is safe.

12. Illustrative Case: A Community Health Information Portal

Background

A fictional community organisation wants a multilingual health-information portal. Many users access it on low-cost phones, some have unreliable connectivity, and the content must be readable with assistive technologies. Editors need to update articles without redeploying the entire frontend.

Problem

A purely client-rendered prototype downloads a large JavaScript bundle before displaying the article. It also caches all responses indiscriminately, risks showing outdated guidance, and uses an icon-only menu without a reliable accessible name.

Analysis

The content is mostly public and article pages should be discoverable and readable quickly. Editor updates are frequent but not continuous. Offline support is useful for previously viewed articles, but new medical guidance must not be represented as current when the device is offline. Personal editor functions require authentication and must not be cached publicly.

Approach and solution

The team selects a headless content service with structured fields for title, language, summary, body, revision date, and content status. Public article pages use server-side or static generation with controlled revalidation. A CDN caches public pages, while authenticated editorial requests bypass shared caching.

A service worker caches the application shell and explicitly marked public articles. The interface displays the article’s revision date and an offline notice when network access is unavailable. It does not cache editor sessions or mutation requests. Semantic HTML, labelled controls, keyboard navigation, visible focus, text alternatives, and manual screen-reader checks are included in acceptance criteria.

An AI assistant drafts component tests and suggests translations, but editors and developers verify medical terminology, language quality, accessibility, and source references. Automated tests check rendering and cache rules; end-to-end tests verify navigation under offline conditions and ensure that private responses are not stored in public caches.

Outcome

The architecture reduces initial content delay, supports controlled offline reading, and gives editors independent content management. It also introduces governance work: revision policies, cache invalidation, translation review, incident response, and periodic accessibility testing. The project succeeds not because one technology solves every problem, but because each technology is limited to a well-defined responsibility.

Learning points

  1. Rendering and caching strategies must reflect content risk and freshness requirements.
  2. Offline support requires explicit communication and safe failure behaviour.
  3. Headless systems improve channel flexibility but require schema and API governance.
  4. AI can accelerate drafting, but domain experts and tests remain accountable.
  5. Accessibility belongs in requirements and acceptance testing, not only in post-build scanning.

Challenges and Limitations

Emerging frontend techniques can increase rather than reduce complexity. Multiple rendering paths make bugs harder to reproduce. Service-worker caches can preserve defects after deployment. Edge runtimes may support fewer libraries than conventional servers. WebAssembly can enlarge an application if used for trivial work. Headless services can create network dependencies and vendor lock-in. AI can amplify insecure patterns at high speed.

Technical debt is also organisational. Teams need deployment automation, dependency monitoring, observability, incident procedures, content governance, and skills development. A mature decision is sometimes to use a simpler, well-understood architecture. Complexity is justified only when its user or business benefit exceeds its operational and governance cost.

Best-Practice Checklist

  • Define requirements and acceptance criteria before prompting an AI system.
  • Treat generated code and tests as untrusted drafts.
  • Verify APIs, browser support, licences, security, and accessibility.
  • Use semantic HTML and progressive enhancement.
  • Choose cache strategies according to freshness, privacy, and failure risk.
  • Keep secrets and confidential data out of unauthorised AI services and client bundles.
  • Measure real user performance across representative devices and networks.
  • Separate public cacheable content from personalised responses.
  • Prefer the simplest architecture that satisfies the requirements.
  • Document important decisions, limitations, and human review.

Chapter Summary

AI-assisted development can improve productivity in coding, testing, documentation, and accessibility analysis, but generated output requires human specification, inspection, execution, testing, and governance. Accessibility must be verified through semantic design, keyboard and assistive-technology testing, and appropriate automated tools.

PWAs combine responsive web design with manifests and service workers, but offline behaviour and caching must be designed around freshness and privacy. CSR, SSR, SSG, and hybrid rendering offer different performance and operational trade-offs. WebAssembly can support computationally intensive work, while edge delivery can reduce latency for suitable workloads. Headless architectures separate content or commerce services from frontend presentation and enable multiple channels, at the cost of integration and governance complexity.

The responsible frontend professional evaluates user needs, browser support, security, privacy, accessibility, performance, maintainability, and team capability before selecting technologies. Emerging capabilities should be adopted through progressive enhancement and evidence-based measurement rather than novelty alone.

Key Terms

AI-assisted development: Human-directed use of artificial intelligence to support software development activities.

Accessibility: Designing products so people with diverse abilities can perceive, operate, understand, and use them.

Progressive web application (PWA): A web application enhanced with capabilities such as installation, offline support, and responsive behaviour.

Web app manifest: A file describing install-related metadata for a web application.

Service worker: A browser-managed script that can handle selected background and network events.

Cache-first: A strategy that attempts cached content before requesting the network.

Network-first: A strategy that prefers the network and uses a cache as fallback.

Client-side rendering (CSR): Constructing substantial interface output in the browser.

Server-side rendering (SSR): Generating HTML on a server in response to a request.

Static site generation (SSG): Producing pages ahead of requests, commonly during a build.

Hydration: Attaching client-side behaviour to server-generated HTML.

WebAssembly (Wasm): A portable binary instruction format for efficient execution in web and other runtimes.

Edge delivery: Serving content or executing request logic near users through distributed infrastructure.

Content delivery network (CDN): A distributed system that caches and delivers resources from multiple locations.

Headless architecture: Separation of backend content or commerce services from frontend presentation.

Progressive enhancement: Building a basic broadly compatible experience and adding capabilities when supported.

Accessible name: The text or computed label by which an assistive technology identifies a control.

Cache invalidation: Removing or replacing stored content when it is no longer suitable to serve.

Human-in-the-loop: A process in which people review, direct, and remain accountable for automated assistance.

Review Questions

Short Answer Questions

  1. Why must AI-generated frontend code be verified even when it appears plausible?
  2. What are the main roles of a web app manifest and a service worker?
  3. Distinguish client-side rendering from server-side rendering.
  4. Give two appropriate uses and two inappropriate uses of AI in frontend development.
  5. Why can a CDN or edge cache create a privacy risk?

Long Answer Questions

  1. Explain a complete workflow for responsibly using AI to generate an accessible frontend component.
  2. Compare CSR, SSR, SSG, and hybrid rendering, including their performance and operational trade-offs.
  3. Explain PWA caching strategies and discuss why no single strategy is suitable for every resource.
  4. Describe the benefits and limitations of WebAssembly in a browser application.
  5. Explain how a headless architecture works and analyse the governance responsibilities it creates.

Analytical / Application Questions

  1. A public news site needs fast global delivery, frequent editorial updates, and search-visible pages. Recommend a rendering and delivery architecture and justify your cache and invalidation choices.
  2. An offline-first field application records inspection forms in areas with intermittent connectivity. Identify the service-worker, synchronisation, privacy, and accessibility issues that must be addressed before deployment.
  3. An AI assistant proposes a modal dialog using clickable div elements, automatic focus movement, and an unverified third-party package. Analyse the risks and specify the verification and redesign steps you would require.

Multiple Choice Questions with Answers

Question 1

Which statement best describes responsible AI-assisted frontend development?

A. Accepting generated code when it compiles

B. Using AI for drafts while humans verify requirements, quality, and risks

C. Removing code review because AI has seen many examples

D. Using AI only for CSS and never for testing

Correct Answer: B. Using AI for drafts while humans verify requirements, quality, and risks

Question 2

Which capability is primarily provided by a service worker?

A. Defining an application’s installation name and icons

B. Replacing the browser’s security model

C. Intercepting selected requests and managing caches

D. Guaranteeing that every application feature works offline

Correct Answer: C. Intercepting selected requests and managing caches

Question 3

What is a major risk of caching personalised responses in a shared edge cache?

A. The page will always become static

B. Private data may be served to another user

C. The browser cannot parse HTML

D. WebAssembly compilation will fail

Correct Answer: B. Private data may be served to another user

Question 4

Which rendering approach generates HTML ahead of incoming requests, commonly during a build?

A. Static site generation

B. Client-side rendering

C. Hydration

D. WebAssembly

Correct Answer: A. Static site generation

Question 5

Which is an appropriate use of WebAssembly?

A. Replacing all semantic HTML

B. Handling computationally intensive image processing

C. Providing unrestricted operating-system access

D. Automatically making an application accessible

Correct Answer: B. Handling computationally intensive image processing

Question 6

Why should generated accessibility advice be manually tested?

A. Automated tools cannot run in browsers

B. Accessibility depends only on colour contrast

C. Tools may miss contextual and interaction problems

D. Manual testing is needed only for decorative images

Correct Answer: C. Tools may miss contextual and interaction problems

Question 7

What does a headless architecture primarily separate?

A. HTML from CSS

B. Content or commerce services from frontend presentation

C. The browser from the network

D. Testing from deployment

Correct Answer: B. Content or commerce services from frontend presentation

Question 8

Which practice best protects confidential information when using an external AI service?

A. Paste production credentials so the AI can debug accurately

B. Submit customer records without modification

C. Use only approved services and avoid disclosing unauthorised confidential data

D. Assume prompts are automatically private

Correct Answer: C. Use only approved services and avoid disclosing unauthorised confidential data

Question 9

What is hydration in an SSR application?

A. Compressing server logs

B. Attaching client-side behaviour to server-generated HTML

C. Deleting stale service-worker caches

D. Compiling JavaScript into WebAssembly

Correct Answer: B. Attaching client-side behaviour to server-generated HTML

Question 10

Which principle is central to progressive enhancement?

A. Require the newest browser before showing content

B. Build a basic compatible experience and add supported enhancements

C. Render every page exclusively at the edge

D. Use a framework for every interaction

Correct Answer: B. Build a basic compatible experience and add supported enhancements

Frontend Development
Chapter 15 of 15