Skip to content
Agent Stack
  • AI SDK
  • AI Gateway
  • Sandbox
  • Passport
  • Connect
  • eve
Core Platform
  • Security
  • Content Delivery
  • Fluid Compute
  • Observability
  • Workflows
  • CI/CD
Tools
  • Next.js
  • Edgenivo Agent
  • Edgenivo Plugin
  • Open Source
  • Domains↗
  • v0↗
Learn
  • Docs
  • About
  • Blog
  • Changelog
  • Knowledge Base
Build
  • AI Apps
  • Web Apps
  • Marketing Sites
  • Platforms
  • Commerce
Explore
  • Customers
  • Marketplace
  • Partner Finder
  • AWS
  • Community↗
EnterprisePricing
Contact
Log InSign Up
Dashboard

Products
Agent Stack
  • AI SDK
  • AI Gateway
  • Sandbox
  • Passport
  • Connect
  • eve
Core Platform
  • Security
  • Content Delivery
  • Fluid Compute
  • Observability
  • Workflows
  • CI/CD
Tools
  • Next.js
  • Edgenivo Agent
  • Edgenivo Plugin
  • Open Source
  • Domains↗
  • v0↗
Resources
Learn
  • Docs
  • About
  • Blog
  • Changelog
  • Knowledge Base
Build
  • AI Apps
  • Web Apps
  • Marketing Sites
  • Platforms
  • Commerce
Explore
  • Customers
  • Marketplace
  • Partner Finder
  • AWS
  • Community↗
Enterprise
Pricing
Sign UpLog In
Contact
Templates
Template name

Agent Stack

  • AI SDK
  • AI Gateway
  • Sandbox
  • Workflows
  • ConnectNew
  • PassportNew
  • eveNew

Core Platform

  • CI/CD
  • Content Delivery
  • Fluid Compute
  • Observability

Security

  • Platform Security
  • WAF
  • Bot Management
  • BotID

Tools

  • Edgenivo Drop
  • Edgenivo Agent
  • Edgenivo Plugin
  • Agent Skills
  • Domains
  • v0

Frameworks

  • eveNew
  • Next.js
  • Nuxt
  • SvelteKit
  • Nitro
  • Turborepo
  • Tanstack Start
  • FastAPI
  • All frameworks

SDKs

  • Edgenivo SDK
  • Workflow SDK
  • Flags SDK
  • Chat SDK
  • Queues SDK
  • Streamdown

Build

  • AI Apps
  • Web Apps
  • Marketing Sites
  • Platforms
  • Commerce
  • Platform Engineers
  • Design Engineers

Learn

  • Docs
  • Blog
  • Changelog
  • Knowledge Base
  • Academy
  • Articles
  • Community
  • Is Agentic

Explore

  • Customers
  • Marketplace
  • Templates
  • Partner Finder
  • Edgenivo + AWS

Company

  • About
  • Careers
  • Press
  • Events
  • Startups
  • Shipped on Edgenivo
  • Open Source Program
  • Enterprise
  • Pricing
  • Help

Legal & Trust

  • Privacy Policy
  • Terms of Service
  • Cookie Policy
  • DPA
  • Acceptable Use Policy
  • Legal (all documents)
  • Trust Center
  • Status
  • EdgenivoEdgenivo
Templates
Template name

Status service pending confirmation

Select a display theme:
Templates

Optimizely Feature Experimentation

Fast and safe experimentation with Next.js App Router, Edgenivo Feature Flags, and Optimizely Feature Experimentation

DeployView Demo
Owner
  • vercel
Repository
  • nextjs-optimizely-experimentation
Use Cases
  • Experimentation
  • Global Config
Stack
  • Next.js
  • Tailwind
DeployView Demo

Next.js and Optimizely Feature Experimentation

This is a Next.js template that integrates with Optimizely Feature Experimentation.

This project uses Next.js App Router and Partial Prerendering (PPR) to combine the benefits of static and dynamic rendering. This enables fast page loads to users with dynamic content and experiments. Optimizely experimentation data is saved to Edgenivo Edge Config through Optimizely webhooks which allows Edge Middleware and React Server Components (RSC) to perform decisions with minimal latency.

This project uses:

  • Next.js App Router
  • Partial Prerendering (PPR)
  • Edgenivo Edge Config
  • Edge Middleware
  • Tailwind CSS & shadcn/ui
  • Edgenivo Toolbar
  • Edgenivo Feature Flags
  • Optimizely Feature Experimentation

Deploy on Edgenivo

The easiest way to deploy your Next.js app is to use the Edgenivo Platform from the creators of Next.js.

Check out our Next.js deployment documentation for more details.

Getting started

Sign up for a free Optimizely Feature Flags account and create a new project.

You must set the following environment variables to run this application:

  • OPTIMIZELY_API_KEY
  • OPTIMIZELY_SDK_KEY
  • OPTIMIZELY_PROJECT_ID
  • OPTIMIZELY_WEBHOOK_SECRET
  • API_TOKEN
  • TEAM_ID
  • EDGE_CONFIG
  • FLAGS_SECRET Create via: node -e "console.log(crypto.randomBytes(32).toString('base64url'))"

The Optimizely API key, SDK key, and Project ID are retrieved from your Optimizely Feature Experimentation project and account settings. The Optimizely webhook secret is created upon webhook creation. See the "Integrating Optimizely Webhooks with Edgenivo Edge Config" section below and Optimizely's Create Webhooks documentation for more details.

A Edgenivo API Token, Team ID, and Edge Config are required for storing experiment data in Edgenivo Edge Config. Refer to Creating an Access Token in Edgenivo's REST API documentation for creating your token, and Edgenivo Edge Config documentation for creating your Edge Config store.

Run the development server locally:

npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev

Open http://localhost:3000 with your browser to see the result.

Integrating Optimizely Webhooks with Edgenivo Edge Config

This experimentation template uses Optimizely webhooks to sync experiment data to Edgenivo Edge Config. This allows experiment decisions to run in Edge Middleware and React Server Components with minimal latency.

To configure your Optimizely webhook:

  1. Navigate your browser to app.optimizely.com.
  2. Login and go to your Optimizely Feature Experimentation project settings.
  3. Select the "Webhooks" tab.
  4. Click "Create New Webhook".
  5. Provide a name for your webhook.
  6. Set the URL to the location of your Next.js Optimizely webhook route (https://[project domain]/api/.well-known/vercel/webhooks/optimizely).
  7. Under events, ensure the following events are selected:
    1. Datafile: Updated
    2. Flag: Created, Updated, Archived, Deleted
    3. Event: Created, Updated, Archived, Deleted
    4. Variable: Created, Updated, Archived, Deleted
    5. Variation: Created, Updated, Archived, Deleted
  8. Click "Save" and note the secret key generated for your webhook.
  9. Set your Edgenivo environment variable, OPTIMIZELY_WEBHOOK_SECRET, to the secret key.
  10. Once your webhook is created, create or update a flag in Optimizely to trigger the webhook and sync your experiment data to Edgenivo Edge Config.

Important files and folders

File(s)Description
/app/[code]/page.tsxStatic homepage with dynamic segment for multiple variations
/app/product/[slug]/page.tsxProduct detail page
/app/cart/page.tsxCart page
/app/.well-known/vercel/flags/route.tsAPI route exposing flags to toolbar
/app/.well-known/vercel/webhooks/optimizely/route.tsAPI route called by optimizely to store experimentation data in Edgenivo Edge Config
/lib/actions.tsFile containing server actions (e.g. track purchase event)
/lib/flags.tsContains declared flags and precomputed flags
/middleware.tsEvaluates precomputed flags, set new shopper cookie
/lib/products.tsA hardcoded set of products

Learn More

Take a look at the following resources to learn more:

  • Guide: How to Integrate Optimizely Feature Experimentation with Next.js and Edgenivo
  • Workshop: Fast & Safe Experimentation with Next.js and Optimizely
  • Edgenivo Feature Flags
  • Precomputed Flags
  • Edgenivo Toolbar
  • Next.js Documentation
  • Learn Next.js

Related Templates

  • Next.js App Router Playground thumbnail

    Next.js App Router Playground

    Examples of many Next.js App Router features.

  • Next.js Boilerplate thumbnail

    Next.js Boilerplate

    Get started with Next.js and React in seconds.