How to Build a RAG Application: Step-by-Step Guide

How to Build a RAG Application

Retrieval-Augmented Generation (RAG) has become one of the most practical approaches for building enterprise AI applications that answer questions using trusted business information instead of relying only on the knowledge embedded in a language model. Rather than retraining an LLM whenever documents change, a RAG application retrieves relevant information from an external knowledge source and injects it into the prompt during inference, allowing responses to remain current, grounded, and verifiable.

This guide explains how to build a RAG application from end to end. It covers every major stage of a production-ready implementation, including data ingestion, document parsing, chunking strategies, embedding generation, vector search, retrieval, reranking, prompt assembly, evaluation, deployment, monitoring, and continuous improvement. The primary focus is practical engineering decisions rather than framework-specific implementation.

What Is a RAG Application?

A RAG application is an AI system that combines a language model with an external retrieval layer. Instead of answering solely from its internal parameters, the model first searches an external knowledge base for relevant information, incorporates the retrieved context into the prompt, and then generates a grounded response.

Unlike traditional prompt-only applications, a production RAG system separates knowledge from reasoning. Business documents, manuals, policies, support articles, product specifications, and other enterprise content remain outside the model and can be updated independently. This architecture improves knowledge freshness, supports source citations, enables permission-aware access, and reduces the need for repeated model retraining as organizational data evolves.

How RAG Works: Retrieve, Augment, and Generate

A production RAG pipeline consists of three high-level stages. First, the retrieval layer searches an indexed knowledge base and identifies documents or document chunks that are relevant to the user’s request. Second, the retrieved content is combined with system instructions and user input to create an augmented prompt. Finally, the language model generates an answer using both its reasoning capabilities and the supplied evidence.

Modern implementations often extend this basic workflow with query rewriting, reranking, metadata filtering, permission checks, citation generation, and response validation to improve retrieval quality and reduce unsupported claims.

When RAG Is the Right Approach

RAG is particularly effective when answers depend on current, private, or frequently changing information. Enterprise knowledge assistants, internal search systems, customer support platforms, technical documentation portals, compliance applications, and policy lookup tools all benefit from retrieval because the underlying knowledge changes independently of the language model.

RAG is less suitable when the primary challenge is inconsistent model behavior, specialized formatting, or narrow task execution. In those situations, behavioral customization through fine-tuning—or a hybrid architecture combining retrieval and fine-tuning—may produce better results.

RAG Application Architecture and Core Components

A production-ready RAG application architecture consists of several independent layers that work together to transform enterprise documents into grounded AI responses. Separating these responsibilities improves scalability, maintainability, observability, and security while allowing each component to evolve independently.

At a high level, the architecture includes a data ingestion pipeline, document processing, embedding generation, vector indexing, retrieval, reranking, prompt assembly, LLM inference, and response validation. Supporting services typically handle authentication, access control, monitoring, feedback collection, and evaluation.

Unlike a simple chatbot, a production RAG application continuously synchronizes enterprise knowledge with retrieval infrastructure while ensuring that only authorized content is retrieved and that every response can be traced back to its supporting evidence.

Data Sources and the Ingestion Layer

The ingestion layer connects the RAG system to enterprise knowledge sources such as document repositories, content management systems, shared drives, APIs, help centers, cloud storage, or internal databases. Its responsibility is to collect content, preserve ownership metadata, and prepare documents for downstream processing.

Production ingestion pipelines typically support scheduled synchronization, event-driven updates, incremental indexing, document deletion, version tracking, and permission synchronization. These capabilities ensure that retrieval always reflects the latest approved content while respecting enterprise security policies and document access controls.

Document Parsing, Cleaning, and Chunking

Before documents can be retrieved efficiently, they must be transformed into clean, structured text. Parsing removes unsupported formatting while preserving meaningful content, headings, tables, references, and document hierarchy.

The next step is text chunking, which divides documents into smaller retrieval units. Chunk size and overlap influence retrieval quality because they determine how much context is available during search. Chunks that are too small may lose important information, while overly large chunks may introduce irrelevant content and reduce retrieval precision.

The optimal chunking strategy depends on document structure, business requirements, retrieval objectives, and the capabilities of the selected language model.

Embedding Models and Vector Databases

After chunking, each document segment is converted into vector embeddings using an embedding model. These numerical representations capture semantic meaning, allowing the system to retrieve relevant passages based on similarity rather than exact keyword matches.

The embeddings are stored inside a vector database or vector index, where they can be searched efficiently during inference. Selecting an embedding model and storage technology depends on factors such as supported languages, retrieval quality, latency requirements, dimensionality, update frequency, and operational scale.

Production deployments should evaluate embedding models using representative enterprise queries instead of relying solely on public benchmarks.

Retrieval, Filtering, and Reranking

The retrieval layer identifies candidate passages using semantic search, keyword search, or a hybrid strategy that combines both techniques. Initial retrieval is often followed by metadata filtering, permission checks, and reranking to improve the relevance of the final context supplied to the language model.

Reranking models evaluate the retrieved candidates more precisely than vector similarity alone, helping remove loosely related documents and prioritize passages that best answer the user’s request. The retrieval strategy should balance recall and precision while minimizing irrelevant context that could reduce response quality or increase token usage.

Prompt Assembly and LLM Generation

The final retrieval results are assembled into a structured prompt together with system instructions, conversation history, user input, retrieved evidence, and citation identifiers. Prompt construction determines how effectively the language model uses the available context during inference.

A production prompt should manage context ordering, duplicate removal, token budgeting, and instruction hierarchy while clearly separating trusted retrieved evidence from user input. Additional validation rules can restrict unsupported claims, require citation usage, or define structured output formats before the model generates the final response.

Production RAG Architecture Components

Component Primary Responsibility Typical Technologies
Data Ingestion Collect enterprise content CMS, APIs, SharePoint, Google Drive, S3
Document Processing Parsing, cleaning, chunking PDF parsers, OCR, preprocessing pipelines
Embedding Layer Generate vector embeddings Embedding models
Vector Database Store and search vectors Vector indexes, hybrid search engines
Retrieval Layer Semantic retrieval and filtering Vector search, keyword search, reranking
LLM Layer Generate grounded responses Foundation language models
Observability Evaluation, tracing, monitoring Logs, metrics, dashboards

Application, API, and User Interface Layer

The application layer exposes the RAG pipeline through the interfaces users interact with, such as web applications, chatbots, mobile apps, internal portals, APIs, or AI agents. This layer is responsible for authenticating users, managing sessions, streaming responses, preserving conversation history, and presenting retrieved source citations alongside generated answers.

In production systems, the API layer should also handle request validation, timeouts, retries, rate limiting, and error handling while coordinating communication between the user interface, retrieval services, and the language model. A well-designed application layer provides a responsive user experience without exposing the complexity of the underlying RAG application architecture, allowing retrieval, generation, and monitoring components to evolve independently.

 

Security, Monitoring, and Feedback Loops

A production RAG application should be designed with security and observability as core architectural principles rather than post-deployment additions. The system should authenticate users before retrieval, enforce document-level permissions, and ensure that retrieved context never exposes information beyond the user’s access rights.

Monitoring should cover both infrastructure and retrieval quality. Engineering teams should track retrieval latency, document freshness, citation coverage, unsupported responses, retrieval failures, token usage, user feedback, and system errors. Continuous feedback collection allows teams to improve chunking strategies, retrieval logic, reranking quality, and prompt design while maintaining a measurable baseline for future releases.

Before You Build: Define Requirements and Success Metrics

Successful RAG implementation begins with a clear understanding of the business problem before any technical decisions are made. Teams should identify the target users, expected questions, supported document types, response format, security requirements, update frequency, latency expectations, and measurable success criteria.

Building a small evaluation dataset before implementation helps validate architectural decisions objectively. Representative user questions, expected answers, retrieved passages, and acceptance criteria provide a reliable benchmark throughout development and deployment.

A strong evaluation baseline also makes it easier to compare different chunking strategies, embedding models, retrieval methods, and prompt templates without relying on assumptions or public benchmarks.

Identify the Use Case and Expected User Questions

The application use case determines nearly every architectural decision within a RAG system. An enterprise knowledge assistant, technical support chatbot, legal search application, or internal policy assistant will each require different retrieval strategies, document structures, and evaluation criteria.

Teams should begin by identifying representative user questions, expected workflows, follow-up interactions, and situations where the system should escalate to a human expert. Mapping common user journeys early helps define the required knowledge sources, expected outputs, citation requirements, and retrieval performance before implementation begins.

Define Data Freshness, Security, Latency, and Scale

Production architecture should reflect operational requirements rather than technical preferences. Organizations should determine how quickly new documents must become searchable, which users may access specific information, acceptable response times, expected traffic volume, regulatory requirements, and long-term scalability goals.

These requirements directly influence ingestion frequency, embedding updates, indexing strategy, retrieval infrastructure, caching policies, and deployment architecture. There is no universally optimal configuration because every RAG application balances freshness, performance, infrastructure cost, security, and operational complexity differently.

Create an Evaluation Dataset and Baseline

Before optimizing retrieval quality, teams should establish an evaluation dataset that reflects realistic production scenarios. Each test case should include representative user questions, expected evidence, accepted answers, and objective evaluation criteria.

Versioning evaluation datasets separately from production content allows engineering teams to compare architectural changes fairly over time. A strong baseline makes it possible to evaluate different embedding models, chunking approaches, retrieval strategies, reranking models, and prompt templates using identical workloads, reducing the risk of optimizing one component while degrading overall system quality.

How to Build a RAG Application Step by Step

Building a production-ready RAG application is an iterative engineering process rather than a single implementation task. Each stage should be validated independently before moving to the next, allowing teams to isolate problems and optimize individual components without affecting the entire system.

The workflow generally follows this sequence:

This pipeline separates data preparation from query-time retrieval, making the architecture easier to maintain, monitor, and scale as enterprise knowledge grows.

Step 1: Collect and Prepare Source Data

The first step in RAG implementation is identifying authoritative knowledge sources and defining ownership, update frequency, permissions, and retention policies. Content may originate from document repositories, knowledge bases, APIs, internal portals, cloud storage, or enterprise applications.

Before ingestion, low-quality, duplicated, outdated, or unsupported documents should be removed. Teams should also preserve document identifiers, timestamps, hierarchy, metadata, and access permissions because these attributes are required later for retrieval, filtering, citations, and security. A well-defined ingestion manifest simplifies future synchronization and reduces operational complexity as the knowledge base grows.

Step 2: Parse, Clean, and Normalize Documents

Raw enterprise documents rarely arrive in a format suitable for retrieval. During preprocessing, the system extracts structured text while preserving headings, tables, lists, references, and document hierarchy. Boilerplate content, duplicated headers, navigation elements, encoding issues, and irrelevant sections should be removed to improve retrieval quality.

Normalization also standardizes formatting, whitespace, metadata, and document structure across multiple content sources. Maintaining provenance information throughout preprocessing allows retrieved passages to be traced back to their original documents, supporting reliable citations and easier debugging during evaluation.

Step 3: Choose a Chunking Strategy

Chunking determines how documents are divided into retrieval units and is one of the most important design decisions in a production RAG application architecture. Fixed-size chunks are simple to implement, while sentence-based, recursive, semantic, or structure-aware approaches often preserve context more effectively.

The optimal chunk size and overlap depend on document type, question complexity, retrieval objectives, context window limitations, and business requirements. Technical documentation may benefit from preserving section boundaries, while policy documents often require hierarchical chunking that keeps related clauses together. Chunking strategies should always be validated against representative enterprise queries rather than selected by default.

Step 4: Select an Embedding Model

Embedding models convert document chunks into vector representations that enable semantic retrieval. Model selection should consider supported languages, retrieval quality, latency requirements, dimensionality, hosting options, update frequency, and operational cost.

The same embedding model should generally be used for both document indexing and query encoding to ensure consistent vector representations. Instead of relying solely on public benchmarks, engineering teams should compare candidate models using their own evaluation dataset because retrieval quality depends heavily on domain-specific terminology and business content.

Step 5: Create the Vector Index

After embeddings are generated, they are stored inside a vector index together with document identifiers, metadata, permissions, timestamps, and other searchable attributes. The vector index becomes the retrieval layer’s primary search structure during inference.

Production deployments should plan for incremental indexing, document updates, deletion handling, backup strategies, tenant isolation, and version management. Index design should reflect expected document volume, retrieval latency objectives, and operational requirements rather than focusing exclusively on indexing speed.

Step 6: Implement the Retrieval Layer

The retrieval layer transforms a user request into one or more search queries and retrieves candidate document chunks from the vector index. Depending on the application, retrieval may use semantic search, keyword search, or a hybrid strategy combining both approaches.

Production retrieval pipelines often include query normalization, metadata filtering, access control, search expansion, configurable top-k retrieval, and deduplication before the results reach the language model. Logging retrieval identifiers, relevance scores, latency, and selected documents provides valuable data for later evaluation and troubleshooting.

Short Technology Flow — Ingestion Pipeline

This flow intentionally remains technology-agnostic so it can be implemented using different vector databases, embedding providers, and orchestration frameworks.

Step 7: Add Reranking and Metadata Filtering

Initial retrieval often returns documents that are generally relevant but not necessarily the best evidence for the user’s question. A reranking stage improves precision by reordering candidate passages using a more sophisticated relevance model before they are sent to the language model.

Production systems also apply metadata filtering before or during retrieval. Filters may restrict results by tenant, user permissions, document type, language, publication date, product, department, or geographic region. Combining semantic retrieval with metadata constraints reduces irrelevant context while maintaining security boundaries. Engineering teams should balance retrieval quality against additional latency because reranking introduces extra computation that may not be necessary for every request.

Step 8: Build the Prompt and Context Assembly Logic

Prompt assembly combines system instructions, user input, retrieved evidence, conversation history, citation identifiers, and output requirements into a structured prompt for the language model. The quality of context assembly directly influences the quality of the generated response.

A production pipeline should remove duplicate passages, preserve document order when necessary, allocate tokens efficiently, and clearly distinguish trusted retrieved content from user instructions. Context compression may also be applied when retrieved content exceeds the available context window. The goal is to maximize relevant evidence while minimizing unnecessary tokens that increase inference cost and reduce retrieval effectiveness.

Step 9: Connect the LLM and Generate the Answer

The assembled prompt is sent to the selected language model through a stable inference layer or model gateway. This layer manages model selection, parameter configuration, streaming, retries, timeout handling, and structured output generation where required.

Different language models may perform differently depending on reasoning quality, context length, multilingual support, latency requirements, privacy constraints, and operational cost. Rather than optimizing for a single benchmark, production teams should evaluate candidate models using realistic enterprise workloads and representative user queries. Logging prompts, model versions, token usage, and responses also supports later debugging, evaluation, and continuous improvement.

Step 10: Add Source Citations and Guardrails

Reliable grounded responses require more than retrieving relevant documents. The system should associate every generated claim with the supporting document or passage and present citations in a way that users can easily verify.

Production guardrails should also validate model outputs for unsupported claims, prompt injection attempts, unsafe content, sensitive information exposure, and restricted actions. Depending on the use case, additional controls may include confidence thresholds, clarification requests, structured validation rules, or human review for high-impact responses. These safeguards improve trust while reducing the likelihood of hallucinations or policy violations.

Step 11: Evaluate Retrieval and Generation Quality

Evaluation should measure retrieval and answer generation separately because failures often originate in different parts of the pipeline. Retrieval evaluation verifies whether the correct evidence was found, while generation evaluation determines whether the answer accurately reflects that evidence and satisfies the user’s request.

Engineering teams should evaluate representative production scenarios rather than isolated examples. Comparing retrieval strategies, chunking methods, embedding models, reranking configurations, and prompt templates against the same evaluation dataset provides objective evidence for architectural improvements and helps prevent regressions during future releases.

Step 12: Deploy, Monitor, and Improve the System

Production deployment should include controlled releases, environment-specific configuration, observability, rollback procedures, and continuous monitoring. Beyond infrastructure health, teams should monitor retrieval latency, citation coverage, unsupported-answer rates, document freshness, user feedback, and system errors.

Continuous improvement depends on collecting production signals and feeding them back into evaluation. Retrieval failures, low-quality responses, newly created documents, and changing user behavior should all inform future updates to chunking strategies, embeddings, retrieval logic, prompts, and evaluation datasets. A production RAG system is therefore an evolving platform rather than a one-time implementation.

Technology Flow — Query-Time Pipeline

How to Evaluate a RAG Application Quality

Evaluating a RAG application requires measuring both retrieval performance and response quality because an incorrect answer may result from retrieving poor evidence, generating an inaccurate response, or both. Measuring only the final output rarely reveals where the failure occurred.

A production evaluation process should therefore separate retrieval metrics from generation metrics while also validating security, citations, permissions, latency, and user satisfaction. Representative enterprise test sets should include realistic questions, expected evidence, acceptable responses, and known failure cases. Evaluations should be versioned and repeated after every significant architectural change to ensure improvements in one component do not unintentionally reduce overall system quality.

Retrieval Metrics: Recall, Precision, and Ranking Quality

Retrieval quality determines whether the language model receives the information needed to answer correctly. Evaluation should measure how often relevant evidence appears among retrieved candidates, how accurately irrelevant documents are excluded, and whether the most useful passages are ranked near the top.

Depending on the retrieval strategy, engineering teams may evaluate metrics such as retrieval recall, precision, Mean Reciprocal Rank (MRR), or Normalized Discounted Cumulative Gain (NDCG). Rather than optimizing for a single metric, teams should compare retrieval performance using representative enterprise questions and validate that highly ranked documents consistently contain the evidence required for generation.

Generation Metrics: Faithfulness, Relevance, and Completeness

Generation quality should be evaluated independently from retrieval. Even when the correct evidence has been retrieved, the language model may misunderstand the context, omit important details, introduce unsupported claims, or fail to follow the requested output format.

A comprehensive evaluation considers factual consistency with retrieved evidence, answer completeness, relevance to the user’s request, clarity, citation correctness, and adherence to formatting requirements. Human review and automated evaluation can complement each other, particularly for complex enterprise workflows where factual accuracy alone is not sufficient to determine response quality.

Online Testing, User Feedback, and Regression Checks

Offline evaluation should be complemented with production monitoring because real user behavior often differs from controlled test datasets. User feedback, correction requests, escalation events, sampled conversations, and A/B testing provide valuable signals about retrieval quality and answer usefulness.

Regression testing is equally important. Whenever chunking strategies, embedding models, retrieval logic, reranking, prompts, or language models change, the updated system should be evaluated against the same benchmark dataset. Maintaining a versioned regression suite helps detect quality degradation early and supports safe, incremental improvements throughout the application’s lifecycle.

Production RAG Implementation Best Practices

Successful production RAG systems are built around continuous improvement rather than one-time implementation. Teams should establish representative evaluation datasets, version every major component, preserve source permissions, monitor retrieval and generation independently, and maintain complete observability across the pipeline.

Equally important is selecting architecture decisions that match business requirements instead of following generic best practices. Choices such as chunking strategy, embedding model, retrieval method, reranking, and vector database should be validated using representative enterprise data. Production readiness is achieved through measurable evaluation, controlled deployment, security validation, and continuous monitoring—not by adopting a particular framework or technology stack.

Use Hybrid Search, Query Rewriting, and Reranking Selectively

Modern production RAG systems often combine multiple retrieval techniques instead of relying on semantic search alone. Hybrid search merges vector similarity with keyword matching, allowing the system to retrieve both semantically related content and documents containing exact terminology. Query rewriting can further improve retrieval by expanding ambiguous questions, resolving acronyms, or reformulating conversational requests into more effective search queries.

Reranking should be applied only when it produces measurable improvements because it increases computational overhead. Every additional retrieval component introduces its own latency, operational complexity, and potential failure modes. The retrieval architecture should therefore be validated against representative workloads rather than built around maximum feature count.

Protect Private Data with Access-Aware Retrieval

Enterprise RAG applications must enforce access control throughout the retrieval pipeline. User permissions should be verified before documents are retrieved, ensuring that only authorized content is considered during context assembly. Security should not depend solely on the language model because unauthorized information may already be present if retrieval is not permission-aware.

Production implementations commonly apply tenant isolation, document-level permissions, role-based access control, encryption, audit logging, and secure deletion policies. Metadata filtering should always respect organizational security boundaries so that retrieved passages reflect both relevance and user authorization. These controls become especially important for legal, financial, healthcare, and internal enterprise knowledge systems.

Optimize Latency, Cost, Scalability, and Observability

A production RAG system should be optimized across the entire pipeline rather than focusing only on language model inference. Response time depends on document retrieval, reranking, prompt assembly, model generation, network communication, and external service latency. Improvements in one component may expose bottlenecks elsewhere.

Engineering teams should monitor retrieval latency, embedding generation, vector search performance, prompt size, token usage, model response time, and external API dependencies. Caching, parallel retrieval, context compression, batching, autoscaling, and distributed tracing can all improve efficiency when supported by measurable evaluation. Optimization decisions should balance operational cost, responsiveness, scalability, and maintainability according to real production traffic.

Common Mistakes When Building a RAG System

Many RAG implementations fail not because of the language model, but because of weaknesses in retrieval architecture or data quality. Common mistakes include indexing low-quality documents, selecting an inappropriate chunking strategy, ignoring retrieval evaluation, relying exclusively on semantic search, skipping permission-aware retrieval, and deploying without continuous monitoring.

Other frequent issues include oversized prompts, missing citations, stale embeddings, weak metadata management, poor document versioning, and launching new retrieval pipelines without regression testing. Successful production systems treat retrieval, generation, evaluation, and monitoring as equally important components rather than optimizing only model performance.

Building a production-ready RAG application involves much more than connecting a language model to a vector database. Every stage—from data ingestion and document parsing to retrieval, reranking, prompt assembly, evaluation, deployment, and monitoring—affects the reliability of the final system.

There is no universal architecture that fits every organization. Decisions about chunking strategy, embedding model, retrieval method, vector database, and orchestration should always reflect the characteristics of the data, business requirements, security constraints, and expected user workflows. For example, an enterprise knowledge assistant may prioritize document freshness and permission-aware retrieval, while another application may require different optimization priorities.

The most successful implementations follow an iterative engineering process: establish clear requirements, build a measurable evaluation baseline, validate each architectural component independently, and continuously monitor production performance. This approach produces AI systems that remain accurate, maintainable, and adaptable as enterprise knowledge evolves.

Whether you’re developing an enterprise knowledge assistant, AI-powered search platform, internal documentation assistant, or a production-scale Generative AI application, a well-designed RAG architecture is essential for delivering accurate, secure, and maintainable AI experiences.

At Digis, we help organizations design, build, and optimize production-ready RAG applications with modern retrieval pipelines, vector search, enterprise integrations, evaluation frameworks, observability, and secure deployment. Our AI engineers support the complete lifecycle—from architecture design and data preparation to production implementation and continuous optimization.

If you’re planning a Generative AI initiative or looking to build a scalable enterprise RAG solution, contact Digis to discuss your AI Development project and select the architecture that best matches your business requirements.

Retrieval Strategy Comparison

Retrieval Strategy Best For Advantages Trade-offs
Keyword Search Exact terminology and identifiers Fast, deterministic, effective for structured queries Limited semantic understanding
Semantic Search Natural-language questions Captures conceptual similarity May miss exact technical terms
Hybrid Search Enterprise knowledge assistants Combines semantic and lexical retrieval Higher implementation complexity
Hybrid + Reranking Production-critical AI systems Highest retrieval quality for many workloads Additional latency and infrastructure

 

FAQ: How to Build a RAG Application

Do You Need a Vector Database to Build a RAG Application?

Not always. Small RAG systems can use in-memory indexes, database extensions, or keyword search. However, production applications that manage large document collections, frequent updates, or high query volumes typically benefit from a dedicated vector database designed for scalable semantic retrieval and efficient metadata filtering.

How Long Does It Take to Implement a Production RAG System?

A basic prototype can often be developed relatively quickly, but production readiness depends on data preparation, permission management, retrieval evaluation, system integration, monitoring, and security validation. Implementation timelines vary according to document quality, business requirements, infrastructure choices, and the complexity of enterprise workflows.

Production RAG Readiness Checklist

Area Production Checklist
Knowledge Sources Trusted documents identified, ownership defined, update process established.
Document Processing Parsing, cleaning, chunking, metadata extraction and versioning completed.
Retrieval Retrieval strategy validated using representative enterprise queries.
Security Role-based permissions, tenant isolation, encryption and audit logging enabled.
Evaluation Retrieval and generation evaluated independently using a versioned benchmark dataset.
Monitoring Latency, retrieval quality, citations, failures and user feedback continuously monitored.
Operations Rollback strategy, controlled releases and continuous improvement process established.

TELL US ABOUT YOUR NEEDS

Just fill out the form or contact us via email or phone:

    We will contact you ASAP or you can schedule a call
    By sending this form I confirm that I have read and accept Digis Privacy Policy
    today
    • Sun
    • Mon
    • Tue
    • Wed
    • Thu
    • Fri
    • Sat
      am/pm 24h
        confirm