React and Vite single-page dashboard for browsing and analyzing DMARC reports.
  • JavaScript 97.9%
  • CSS 1.6%
  • HTML 0.3%
  • Dockerfile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
alice b06f751092
All checks were successful
Bump Tag on Main / bump-tag (push) Successful in 10s
JS lint / lint (push) Successful in 53s
render-dmarc-ui CI / build-and-push (push) Successful in 1m14s
Merge pull request 'Show the org ID on the Org Admin page' (#23) from feat/org-admin-show-org-id into main
Reviewed-on: #23
2026-08-28 14:41:48 +00:00
.forgejo/workflows ci(github-action)!: Update action actions/checkout ( v4.4.0 → v7.0.1 ) 2026-08-28 05:40:42 +10:00
docs Add backstage 2026-05-18 20:14:38 +10:00
public inital commit 2026-05-05 17:16:15 +10:00
src Show the org ID on the Org Admin page 2026-08-29 00:40:29 +10:00
.eslintignore fix: resolve eslint errors blocking CI 2026-08-28 02:51:34 +10:00
.eslintrc.json chore: disable react-hooks v7 strict rules flagging pre-existing patterns 2026-08-28 05:59:40 +10:00
.gitignore inital commit 2026-05-05 17:16:15 +10:00
Caddyfile Fix unauthenticated Caddy requests returning raw 401 instead of redirecting 2026-08-24 02:47:28 +10:00
catalog-info.yaml chore: update Backstage catalog source location to Forgejo 2026-08-28 04:09:05 +10:00
components.json Migrate UI to shadcn/ui + Tailwind v4 2026-08-24 04:36:05 +10:00
Dockerfile feat(container)!: Update image docker.io/library/node ( 20.20.2 → 24.19.0 ) 2026-08-28 05:40:42 +10:00
index.html Add brand color and dark theme matching render-dmarc-www 2026-08-24 04:51:03 +10:00
jsconfig.json Migrate UI to shadcn/ui + Tailwind v4 2026-08-24 04:36:05 +10:00
nginx.conf inital commit 2026-05-05 17:16:15 +10:00
package-lock.json chore: reconcile package-lock.json after local npm install 2026-08-28 06:45:36 +10:00
package.json feat(deps)!: Update dependency vite ( 5.4.21 → 6.4.3 ) [SECURITY] 2026-08-28 06:44:52 +10:00
README.md docs: add Forgejo Actions status badges to README 2026-08-28 02:28:41 +10:00
renovate.json refactor: extend shared Renovate preset instead of duplicating config 2026-08-28 04:03:14 +10:00
vite.config.js fix: resolve eslint errors blocking CI 2026-08-28 02:51:34 +10:00

DMARC Reports Dashboard UI

build-and-push lint

A React + Vite SPA for viewing and analyzing DMARC reports by domain.

Features

  • Domain Selection: Browse all domains with stored DMARC reports
  • Grouped Records: View all authentication records grouped by report
  • Statistics: See aggregated stats (total reports, records, pass/fail counts)
  • Policy Details: Inspect DMARC policy settings for each report
  • Responsive Design: Works on desktop and mobile devices
  • Real-time Updates: Fetches latest data from the DMARC API

Prerequisites

  • Node.js 16+ and npm (or yarn/pnpm)
  • DMARC API running on localhost:8080 (or configure via vite.config.js)

Quick Start

Development

# Install dependencies
npm install

# Start dev server (http://localhost:5173)
npm run dev

# The app will proxy API calls to http://localhost:8080

Production Build

# Build for production
npm run build

# Preview build locally
npm run preview

# Deploy dist/ folder to your server

Project Structure

render-dmarc-ui/
├── public/
│   └── index.html              # HTML template
├── src/
│   ├── App.jsx                 # Main app component
│   ├── index.css               # Global styles
│   ├── main.jsx                # React entry point
│   └── components/
│       ├── DomainSelector.jsx  # Domain dropdown
│       ├── ReportsList.jsx     # Reports container
│       ├── ReportCard.jsx      # Report with records
│       └── Stats.jsx           # Statistics cards
├── package.json
├── vite.config.js
└── README.md

API Endpoints Used

  • GET /api/reports?limit=1000 - Fetch all reports to extract domains
  • GET /api/domains/{domain}/records?limit=2000 - Fetch grouped records for a domain

Deployment

Docker Integration

To serve the UI from the API container:

  1. Build the React app:
npm run build
  1. Copy dist/ to the API service
  2. Add a static file handler to the API (Go http.FileServer)

Standalone Docker Container

Create a Dockerfile:

FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Configuration

Edit vite.config.js to:

  • Change dev server port (default: 5173)
  • Update API proxy target (default: http://localhost:8080)
  • Adjust build output (default: dist/)

Styling

Uses vanilla CSS with:

  • Mobile-responsive grid layout
  • Color-coded status badges (pass/fail)
  • Expandable report cards
  • Professional color scheme

Browser Support

  • Chrome/Edge 90+
  • Firefox 88+
  • Safari 14+

License

MIT