diff --git a/.eslintrc.json b/.eslintrc.json
index 2502e77..b89e1b1 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -9,6 +9,7 @@
],
"plugins": ["react", "@typescript-eslint"],
"rules": {
- "react/react-in-jsx-scope": "off"
+ "react/react-in-jsx-scope": "off",
+ "react/no-unescaped-entities": "off"
}
}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..c83e263
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+ "recommendations": ["esbenp.prettier-vscode"]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..223187e
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,22 @@
+{
+ "editor.formatOnSave": true,
+ "css.format.enable": true,
+ "[typescript]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[typescriptreact]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[scss]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[css]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[html]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ },
+ "[json]": {
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
+ }
+}
diff --git a/next.config.js b/next.config.js
index b53467a..8ee7474 100644
--- a/next.config.js
+++ b/next.config.js
@@ -14,7 +14,9 @@ const nextConfig = {
basePath: '/dibbs-site',
assetPrefix: '/dibbs-site',
sassOptions: {
- includePaths: [path.join(__dirname, 'styles')],
+ includePaths: [
+ path.join(__dirname, './', 'node_modules', '@uswds', 'uswds', 'packages'),
+ ],
},
};
diff --git a/src/app/case-studies/page.tsx b/src/app/case-studies/page.tsx
new file mode 100644
index 0000000..11448d8
--- /dev/null
+++ b/src/app/case-studies/page.tsx
@@ -0,0 +1,12 @@
+import Hero from '../components/Hero/Hero';
+
+export default function CaseStudies() {
+ return (
+
+
+
+ );
+}
diff --git a/src/app/components/ContentContainer/ContentContainer.tsx b/src/app/components/ContentContainer/ContentContainer.tsx
new file mode 100644
index 0000000..d2e840a
--- /dev/null
+++ b/src/app/components/ContentContainer/ContentContainer.tsx
@@ -0,0 +1,23 @@
+import { GridContainer } from '@trussworks/react-uswds';
+import classNames from 'classnames';
+
+interface ContentContainerProps {
+ children: React.ReactNode;
+ align?: boolean;
+}
+export function ContentContainer({
+ children,
+ align = false,
+}: ContentContainerProps) {
+ return (
+
+ );
+}
diff --git a/src/app/components/Footer.tsx b/src/app/components/Footer.tsx
deleted file mode 100644
index 2c22c29..0000000
--- a/src/app/components/Footer.tsx
+++ /dev/null
@@ -1,76 +0,0 @@
-'use client';
-import { PrimaryNav } from '@trussworks/react-uswds';
-import Link from 'next/link';
-import Image from 'next/image';
-import React from 'react';
-import styles from '../styles/Home.module.scss';
-import { NavigationLink } from './NavigationLink';
-import classNames from 'classnames';
-import { basePath } from '../utils/constants';
-
-export default function Footer() {
- const [expanded, setExpanded] = React.useState(false);
- const onClick = () => {
- if (window.innerWidth < 1024) setExpanded((prvExpanded) => !prvExpanded);
- };
-
- const testItemsMenu = [
-
- Home
- ,
-
- Home
- ,
-
- Our products
- ,
-
- Case studies
- ,
-
- Engage with us
- ,
- ];
-
- return (
- <>
-
- >
- );
-}
diff --git a/src/app/components/Footer/Footer.module.scss b/src/app/components/Footer/Footer.module.scss
new file mode 100644
index 0000000..4aed8ce
--- /dev/null
+++ b/src/app/components/Footer/Footer.module.scss
@@ -0,0 +1,11 @@
+@media (min-width: 1024px) {
+ .navbarLogoText {
+ font-size: 22px;
+ }
+}
+
+@media (max-width: 1024px) {
+ .navbarLogoText {
+ font-size: 13px;
+ }
+}
diff --git a/src/app/components/Footer/Footer.tsx b/src/app/components/Footer/Footer.tsx
new file mode 100644
index 0000000..55697fb
--- /dev/null
+++ b/src/app/components/Footer/Footer.tsx
@@ -0,0 +1,63 @@
+'use client';
+import { PrimaryNav } from '@trussworks/react-uswds';
+import Image from 'next/image';
+import React from 'react';
+import { NavigationLink } from '../NavigationLink/NavigationLink';
+import classNames from 'classnames';
+import { basePath } from '../../utils/constants';
+import styles from './Footer.module.scss';
+
+export default function Footer() {
+ const [expanded, setExpanded] = React.useState(false);
+ const onClick = () => {
+ if (window.innerWidth < 1024) setExpanded((prvExpanded) => !prvExpanded);
+ };
+
+ const testItemsMenu = [
+
+ Home
+ ,
+
+ Our products
+ ,
+
+ Case studies
+ ,
+
+ Engage with us
+ ,
+ ];
+
+ return (
+
+ );
+}
diff --git a/src/app/components/Header/Header.module.scss b/src/app/components/Header/Header.module.scss
new file mode 100644
index 0000000..4aed8ce
--- /dev/null
+++ b/src/app/components/Header/Header.module.scss
@@ -0,0 +1,11 @@
+@media (min-width: 1024px) {
+ .navbarLogoText {
+ font-size: 22px;
+ }
+}
+
+@media (max-width: 1024px) {
+ .navbarLogoText {
+ font-size: 13px;
+ }
+}
diff --git a/src/app/components/Header.tsx b/src/app/components/Header/Header.tsx
similarity index 92%
rename from src/app/components/Header.tsx
rename to src/app/components/Header/Header.tsx
index 0f09875..c1b816c 100644
--- a/src/app/components/Header.tsx
+++ b/src/app/components/Header/Header.tsx
@@ -2,10 +2,10 @@
import { Header as USWDSHeader, PrimaryNav } from '@trussworks/react-uswds';
import Image from 'next/image';
import React from 'react';
-import styles from '../styles/Home.module.scss';
import classNames from 'classnames';
-import { basePath } from '../utils/constants';
-import { NavigationLink } from './NavigationLink';
+import { basePath } from '../../utils/constants';
+import { NavigationLink } from '../NavigationLink/NavigationLink';
+import styles from './Header.module.scss';
export default function Header() {
const [expanded, setExpanded] = React.useState(false);
diff --git a/src/app/components/Hero/Hero.module.scss b/src/app/components/Hero/Hero.module.scss
new file mode 100644
index 0000000..43d7ee5
--- /dev/null
+++ b/src/app/components/Hero/Hero.module.scss
@@ -0,0 +1,17 @@
+.content {
+ display: flex;
+ padding: 0px 30px;
+ align-items: center;
+ gap: 60px;
+ max-width: 1200px;
+}
+
+.heading {
+ max-width: 58.75rem;
+ color: #224a58;
+ font-size: 40px;
+ font-style: normal;
+ font-weight: 700;
+ line-height: normal;
+ margin: 0px;
+}
diff --git a/src/app/components/Hero/Hero.tsx b/src/app/components/Hero/Hero.tsx
new file mode 100644
index 0000000..901c416
--- /dev/null
+++ b/src/app/components/Hero/Hero.tsx
@@ -0,0 +1,24 @@
+import { GridContainer } from '@trussworks/react-uswds';
+import styles from './Hero.module.scss';
+
+interface HeroProps {
+ header: string;
+ subheader: string;
+}
+
+export default function Hero({ header, subheader }: HeroProps) {
+ return (
+
+
+
+
+
{header}
+
+ {subheader}
+
+
+
+
+
+ );
+}
diff --git a/src/app/components/MarkdownComponent.tsx b/src/app/components/MarkdownComponent/MarkdownComponent.tsx
similarity index 84%
rename from src/app/components/MarkdownComponent.tsx
rename to src/app/components/MarkdownComponent/MarkdownComponent.tsx
index 2e3df72..e3e6df7 100644
--- a/src/app/components/MarkdownComponent.tsx
+++ b/src/app/components/MarkdownComponent/MarkdownComponent.tsx
@@ -1,6 +1,6 @@
import React from 'react';
import ReactMarkdown from 'react-markdown';
-import { getMarkdownContent } from '../utils/markdown';
+import { getMarkdownContent } from '../../utils/markdown';
export default async function MarkdownContent(fileName: string) {
const markdownContent = await getMarkdownContent(fileName);
diff --git a/src/app/components/NavigationLink/NavigationLink.module.scss b/src/app/components/NavigationLink/NavigationLink.module.scss
new file mode 100644
index 0000000..ba5f421
--- /dev/null
+++ b/src/app/components/NavigationLink/NavigationLink.module.scss
@@ -0,0 +1,11 @@
+@media (min-width: 1024px) {
+ .navbarItemText {
+ color: #f0f0f0;
+ }
+}
+
+@media (max-width: 1024px) {
+ .navbarItemText {
+ color: #565c65;
+ }
+}
diff --git a/src/app/components/NavigationLink.tsx b/src/app/components/NavigationLink/NavigationLink.tsx
similarity index 93%
rename from src/app/components/NavigationLink.tsx
rename to src/app/components/NavigationLink/NavigationLink.tsx
index baf5df1..18ce846 100644
--- a/src/app/components/NavigationLink.tsx
+++ b/src/app/components/NavigationLink/NavigationLink.tsx
@@ -1,7 +1,7 @@
import classNames from 'classnames';
import Link, { LinkProps } from 'next/link';
import { usePathname } from 'next/navigation';
-import styles from '../styles/Home.module.scss';
+import styles from './NavigationLink.module.scss';
interface NavigationLinkProps extends Pick {
children: React.ReactNode;
diff --git a/src/app/components/UsaBanner.tsx b/src/app/components/UsaBanner/UsaBanner.tsx
similarity index 97%
rename from src/app/components/UsaBanner.tsx
rename to src/app/components/UsaBanner/UsaBanner.tsx
index edeeb4c..df04f53 100644
--- a/src/app/components/UsaBanner.tsx
+++ b/src/app/components/UsaBanner/UsaBanner.tsx
@@ -11,7 +11,7 @@ import {
MediaBlockBody,
Icon,
} from '@trussworks/react-uswds';
-import { basePath } from '../utils/constants';
+import { basePath } from '../../utils/constants';
export default function USABanner() {
const [isOpen, setIsOpen] = useState(false);
diff --git a/src/app/globals.css b/src/app/custom-styles.css
similarity index 79%
rename from src/app/globals.css
rename to src/app/custom-styles.css
index e225cb4..98f3f6b 100644
--- a/src/app/globals.css
+++ b/src/app/custom-styles.css
@@ -1,37 +1,25 @@
@tailwind base;
@tailwind components;
@tailwind utilities;
-@import '@trussworks/react-uswds/lib/uswds.css';
-@import '@trussworks/react-uswds/lib/index.css';
+
+@layer utilities {
+ .text-balance {
+ text-wrap: balance;
+ }
+}
:root {
--background: #ffffff;
--foreground: #171717;
--header-teal: #224a58;
--background-light-blue: #dcecf3;
+ font-size: 16px; /* base value for rem */
}
-@media (prefers-color-scheme: dark) {
- :root {
- --background: #0a0a0a;
- --foreground: #ededed;
- }
-}
-
+html,
body {
- /* color: var(--foreground);
- background: var(--background); */
- font-family: Arial, Helvetica, sans-serif;
-}
-
-@layer utilities {
- .text-balance {
- text-wrap: balance;
- }
-}
-h1 {
- margin: 2rem 0 2rem 0;
- font-size: larger;
+ background: #e7f2f580;
+ font-family: 'Source Sans Pro', sans-serif;
}
.usa-logo a {
@@ -69,7 +57,6 @@ h1 {
}
h1 {
- font-family: 'Source Sans Pro', sans-serif;
font-size: 40px;
font-weight: 700;
line-height: 50.28px;
diff --git a/src/app/engage-with-us/page.tsx b/src/app/engage-with-us/page.tsx
new file mode 100644
index 0000000..0e0ae43
--- /dev/null
+++ b/src/app/engage-with-us/page.tsx
@@ -0,0 +1,137 @@
+'use client';
+import {
+ Button,
+ ComboBox,
+ Form,
+ Grid,
+ Label,
+ Textarea,
+ TextInput,
+} from '@trussworks/react-uswds';
+import { ContentContainer } from '../components/ContentContainer/ContentContainer';
+import Hero from '../components/Hero/Hero';
+
+export default function EngageWithUs() {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function Left() {
+ return (
+ <>
+ Contact us
+
+ Fill out the form below to get in touch with us
+
+
+
+ Send inquiry
+
+ >
+ );
+}
+
+function Right() {
+ return (
+ <>
+
+
+
+ All consultations with the DIBBs team are 100% free. There's no cost
+ to use our products beyond costs to host within your jurisdiction
+ should you choose to do so.
+
+
+
+
+
+ "Our epidemiologists waste 80% of their time cleaning data and
+ can't do useful analysis. The end goal of DIBBs infrastructure is
+ to free up that 80% of their time to do actual public health
+ work."
+
+
+ - Public Health Official, Virginia Department of Health
+
+
+
+
+ >
+ );
+}
diff --git a/src/app/globals.scss b/src/app/globals.scss
new file mode 100644
index 0000000..576d4f2
--- /dev/null
+++ b/src/app/globals.scss
@@ -0,0 +1,2 @@
+@forward 'uswds-settings';
+@forward 'uswds';
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 6f50d2b..ee9f752 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,10 +1,10 @@
import type { Metadata } from 'next';
-import './globals.css';
-import Script from 'next/script';
-import Header from './components/Header';
-import Footer from './components/Footer';
-import USABanner from './components/UsaBanner';
+import Header from './components/Header/Header';
+import Footer from './components/Footer/Footer';
+import USABanner from './components/UsaBanner/UsaBanner';
import { basePath } from './utils/constants';
+import './globals.scss';
+import './custom-styles.css';
export const metadata: Metadata = {
title: 'DIBBS Site',
@@ -27,7 +27,6 @@ export default function RootLayout({
{children}
-