diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/.gitignore b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/.gitignore new file mode 100644 index 0000000..6dde684 --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/.gitignore @@ -0,0 +1,28 @@ +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Environment variables +.env +.env.local +.env.*.local diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/AGENTS.md b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/AGENTS.md new file mode 100644 index 0000000..10637d9 --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/AGENTS.md @@ -0,0 +1,29 @@ +# Sarah's App Wed, Aug 26, 2:14:31 pm + +This app is part of a Datadog Apps workspace. Shared guidance — including layout, dependencies, testing policy, and how changes ship — lives at the workspace root; read it before assuming anything not covered below. + +## Read relevant guides +- Embedded app context / routing / storage: ../../docs/agents/runtime-context.md +- Backend functions (*.backend.ts): ../../docs/agents/backend-functions.md +- Local dev / auth / build / upload: ../../docs/agents/build-upload-auth.md +- CI/CD (GitHub Actions deploy workflow): ../../docs/agents/cicd.md +- Data access (DDSQL vs. Action Catalog, Connections, datastores): ../../docs/agents/data.md +- Triggering or polling Workflow Automation from a backend function: ../../docs/agents/workflow-automation.md +- Upgrading `@datadog/vite-plugin` or `@datadog/action-catalog`: ../../docs/agents/upgrading.md +- Workspace overview (layout, dependencies, testing, shipping/CI): ../../AGENTS.md + +## This app +- This app owns its unique `apps.identifier` in `./vite.config.ts` — never share or copy it. +- Run locally: `npm run dev -w apps/sarah-s-app-wed-aug-26-2-14-31-pm` (from the workspace root) or `npm run dev` (from this directory). +- Upload: `npm run upload -w apps/sarah-s-app-wed-aug-26-2-14-31-pm`. + +## Testing + +Storybook stories are not required for this app right now — skip them unless explicitly asked. Playwright is still encouraged for browser validation when available, especially for visual/design changes. Validate with `npm run dev`, `npm run build`, and `npm run typecheck`/`npm run lint`. + +## Rules + +- Keep secret-dependent work and privileged API calls in backend functions. +- Never hardcode API keys, app keys, or OAuth tokens. +- Prefer the generated npm scripts; this workspace uses npm. +- For any workspace, dependency, lockfile, or pull-request change, follow `Required lockfile gate before opening or updating a PR` in ../../AGENTS.md. That root section is the source of truth; do not create an app-local lockfile. diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/CLAUDE.md b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/CLAUDE.md new file mode 100644 index 0000000..43c994c --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/CLAUDE.md @@ -0,0 +1 @@ +@AGENTS.md diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/datadog-app.config.json b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/datadog-app.config.json new file mode 100644 index 0000000..7a99007 --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/datadog-app.config.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://unpkg.com/@datadog/create-apps/dist/datadog-app.config.schema.json", + "datadogSite": "datadoghq.com", + "id": "733d9160-ecc5-44b5-b9dc-5b76ad34737c", + "name": "Sarah's App Wed, Aug 26, 2:14:31 pm" +} diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/index.html b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/index.html new file mode 100644 index 0000000..d3a06ee --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/index.html @@ -0,0 +1,15 @@ + + + + + + + Sarah's App Wed, Aug 26, 2:14:31 pm + + + +
+ + + + diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/package.json b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/package.json new file mode 100644 index 0000000..18d47a7 --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/package.json @@ -0,0 +1,24 @@ +{ + "name": "sarah-s-app-wed-aug-26-2-14-31-pm", + "version": "0.0.1", + "private": true, + "scripts": { + "dev": "vite", + "build": "vite build", + "upload": "DD_APPS_UPLOAD_ASSETS=1 vite build", + "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", + "lint:fix": "eslint . --ext ts,tsx --fix", + "preview": "vite preview", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@datadog/action-catalog": "^0.0.3", + "@datadog/druids": "^0.0.7", + "@tanstack/react-query": "^5.101.2", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "optionalDependencies": { + "@napi-rs/keyring": "^1.3.0" + } +} diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/public/favicon.ico b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/public/favicon.ico new file mode 100644 index 0000000..e04da3e Binary files /dev/null and b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/public/favicon.ico differ diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/src/App.css b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/src/App.css new file mode 100644 index 0000000..3917516 --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/src/App.css @@ -0,0 +1,45 @@ +.alexander-page { + align-items: center; + background: + radial-gradient(circle at 18% 24%, rgba(255, 176, 0, 0.18), transparent 24%), + radial-gradient(circle at 82% 70%, rgba(255, 219, 92, 0.22), transparent 22%), + #fff8f8; + display: flex; + justify-content: center; + min-height: 100vh; +} + +.alexander-title { + color: #d11124; + font-size: 80px; + letter-spacing: 0; + line-height: 1; + margin: 0; + position: relative; + text-align: center; + text-transform: lowercase; + text-shadow: 0 4px 18px rgba(209, 17, 36, 0.18); +} + +.sparkle { + color: #ffb000; + display: inline-block; + font-size: 0.5em; + line-height: 1; + text-shadow: 0 0 16px rgba(255, 176, 0, 0.65); + transform: translateY(-0.48em); +} + +.sparkle-left { + margin-right: 0.24em; +} + +.sparkle-right { + margin-left: 0.24em; +} + +@media (max-width: 520px) { + .alexander-title { + font-size: 48px; + } +} diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/src/App.tsx b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/src/App.tsx new file mode 100644 index 0000000..2586118 --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/src/App.tsx @@ -0,0 +1,22 @@ +import { Spacing } from '@datadog/druids/layout/Spacing'; +import { Text } from '@datadog/druids/typography/Text'; + +import './App.css'; + +function App() { + return ( + + + + alexander + + + + ); +} + +export default App; diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/src/main.tsx b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/src/main.tsx new file mode 100644 index 0000000..8f2c295 --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/src/main.tsx @@ -0,0 +1,24 @@ +import '@datadog/druids/styles.css'; + +import { DruidsEnvironment } from '@datadog/druids/layout/DruidsEnvironment'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; + +import App from './App'; + +const queryClient = new QueryClient(); +const appRoot = document.getElementById('app'); +if (appRoot) { + createRoot(appRoot).render( + + + + + + + , + ); +} else { + console.error('Missing #app div for createRoot.'); +} diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/tsconfig.json b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/tsconfig.json new file mode 100644 index 0000000..7a01668 --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": [ + "ES2020", + "DOM", + "DOM.Iterable" + ], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": [ + "src" + ] +} \ No newline at end of file diff --git a/apps/sarah-s-app-wed-aug-26-2-14-31-pm/vite.config.ts b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/vite.config.ts new file mode 100644 index 0000000..f894014 --- /dev/null +++ b/apps/sarah-s-app-wed-aug-26-2-14-31-pm/vite.config.ts @@ -0,0 +1,57 @@ +import { datadogVitePlugin } from '@datadog/vite-plugin'; +import react from '@vitejs/plugin-react'; +import { defineConfig } from 'vite'; + +import rootManifest from '../../package.json'; +import { version } from './package.json'; +import datadogAppConfig from './datadog-app.config.json'; + +const hasDatadogApiKeys = Boolean( + (process.env.DD_API_KEY || process.env.DATADOG_API_KEY) && + (process.env.DD_APP_KEY || process.env.DATADOG_APP_KEY), +); +const datadogSite = process.env.DD_SITE || process.env.DATADOG_SITE || datadogAppConfig.datadogSite; + +if (!process.env.DD_SITE && !process.env.DATADOG_SITE) { + process.env.DD_SITE = datadogSite; +} + +export default defineConfig({ + base: './', + build: { + sourcemap: true, + }, + plugins: [ + react(), + datadogVitePlugin({ + logLevel: 'debug', + auth: { + site: datadogSite || rootManifest.datadogApps?.site, + apiKey: process.env.DD_API_KEY, + appKey: process.env.DD_APP_KEY, + }, + apps: { + enable: true, + identifier: '733d9160-ecc5-44b5-b9dc-5b76ad34737c', + name: datadogAppConfig.name, + authOverrides: { + method: hasDatadogApiKeys ? 'apiKey' : 'oauth', + }, + }, + errorTracking: { + enable: hasDatadogApiKeys, + sourcemaps: { + minifiedPathPrefix: '/', + service: datadogAppConfig.name, + releaseVersion: version, + }, + }, + metadata: { + name: datadogAppConfig.name, + }, + metrics: { + enable: hasDatadogApiKeys, + }, + }), + ], +}); diff --git a/package-lock.json b/package-lock.json index a793e21..23ddb64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,6 +57,19 @@ "@napi-rs/keyring": "^1.3.0" } }, + "apps/sarah-s-app-wed-aug-26-2-14-31-pm": { + "version": "0.0.1", + "dependencies": { + "@datadog/action-catalog": "^0.0.3", + "@datadog/druids": "^0.0.7", + "@tanstack/react-query": "^5.101.2", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "optionalDependencies": { + "@napi-rs/keyring": "^1.3.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.29.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", @@ -3982,6 +3995,10 @@ "resolved": "apps/sarah-s-app-tue-aug-25-10-32-30-am", "link": true }, + "node_modules/sarah-s-app-wed-aug-26-2-14-31-pm": { + "resolved": "apps/sarah-s-app-wed-aug-26-2-14-31-pm", + "link": true + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",