Skip to content

Commit

Permalink
about page
Browse files Browse the repository at this point in the history
  • Loading branch information
nsbradford committed Sep 4, 2023
1 parent 9d4a099 commit 148b4a6
Show file tree
Hide file tree
Showing 13 changed files with 426 additions and 227 deletions.
5 changes: 1 addition & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,6 @@ Create and fill forms with chat.

![Vercel](https://img.shields.io/github/deployments/nsbradford/TalkFormAI/production?logo=vercel&label=Vercel%20deployment) ![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/nsbradford/talkformai/playwright.yml?label=e2e%20tests) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)




## Why

Tired of lame, sad forms? Annoyed with tedious form builders? Feeling limited in what kinds of custom validations and logic you can express? You're in luck: [text is the universal interface](https://scale.com/blog/text-universal-interface), and so [TalkForm.AI](https://www.talkform.ai/) is here to help.
Expand All @@ -25,8 +22,8 @@ Head over to [talkform.ai](https://www.talkform.ai/) to try it out!

This is a [Next.js](https://nextjs.org/) project. You'll need **Node** (probably using **[nvm](https://github.com/nvm-sh/nvm)**) and **[yarn](https://yarnpkg.com/)**.


### Secrets

We use Doppler for secrets, see [getting started docs](https://docs.doppler.com/docs/install-cli). Or, put everything in a `.env.local` file.

### Install dependencies
Expand Down
2 changes: 1 addition & 1 deletion doppler.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
setup:
project: talk-form-ai
config: dev
config: dev
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
"@supabase/auth-ui-react": "^0.4.2",
"@supabase/supabase-js": "^2.33.1",
"@tailwindcss/forms": "^0.5.6",
"@tailwindcss/typography": "^0.5.9",
"@types/node": "20.5.7",
"@types/react": "18.2.21",
"@types/react-dom": "18.2.7",
Expand Down
2 changes: 1 addition & 1 deletion src/components/home/NavBar2.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ export default function NavBar2() {
const navigation = [
{
name: 'About',
href: '/contact',
href: '/about',
current: false,
},
{
Expand Down
122 changes: 80 additions & 42 deletions src/components/landing/Team.tsx
Original file line number Diff line number Diff line change
@@ -1,55 +1,93 @@
import React from 'react';
import TeamMember from './TeamMember';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faTwitter, faLinkedin, faGithub } from '@fortawesome/free-brands-svg-icons';
import {
faTwitter,
faLinkedin,
faGithub,
} from '@fortawesome/free-brands-svg-icons';

interface Props {
members: TeamMember[];
members: TeamMember[];
}

const Team: React.FC<Props> = ({ members }) => {
return (
<div className="container mx-auto p-8">
<div className="">
{/* <h2 className="text-2xl block text-center font-semibold mb-4">About the Team</h2> */}
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{members.map((member, index) => (
<div key={index} className="p-4 rounded bg-gray-100 rounded-2xl border border-2 border-gray-200">
<img src={member.image} alt={member.name} className="w-40 h-40 rounded-full mx-auto mb-4 border border-2 border-gray-400"/>
<h3 className="block text-center text-xl">{member.name}</h3>
{
member.subtitle && (
<p className="text-gray-600 text-center">{member.subtitle}</p>
)
}
{
member.website && (
<a href={'https://' + member.website} className="text-blue-500 hover:underline block text-center">{member.website}</a>
)
}
<div className="mt-2 space-x-4 text-center">
{member.socials.twitter == null ? <></> : (
<a href={member.socials.twitter} target="_blank" rel="noopener noreferrer" className="hover:text-blue-500">
<FontAwesomeIcon icon={faTwitter} className="fa-fw text-gray-400 px-3 md:px-6 py-3 text-2xl hover:text-indigo-600 transition duration-200 hover:scale-125 ease-in-out "/>
</a>
)}
{member.socials.linkedIn && (
<a href={member.socials.linkedIn} target="_blank" rel="noopener noreferrer" className="hover:text-blue-500">
<FontAwesomeIcon icon={faLinkedin} className="fa-fw text-gray-400 px-3 md:px-6 py-3 text-2xl hover:text-indigo-600 transition duration-200 hover:scale-125 ease-in-out "/>
</a>
)}
{member.socials.github && (
<a href={member.socials.github} target="_blank" rel="noopener noreferrer" className="hover:text-blue-500">
<FontAwesomeIcon icon={faGithub} className="fa-fw text-gray-400 px-3 md:px-6 py-3 text-2xl hover:text-indigo-600 transition duration-200 hover:scale-125 ease-in-out "/>
</a>
)}
</div>
</div>
))}
</div>
return (
<div className="container mx-auto p-8">
<div className="">
{/* <h2 className="text-2xl block text-center font-semibold mb-4">About the Team</h2> */}
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
{members.map((member, index) => (
<div
key={index}
className="p-4 rounded bg-gray-100 rounded-2xl border border-2 border-gray-200"
>
<img
src={member.image}
alt={member.name}
className="w-40 h-40 rounded-full mx-auto mb-4 border border-2 border-gray-400"
/>
<h3 className="block text-center text-xl">{member.name}</h3>
{member.subtitle && (
<p className="text-gray-600 text-center">{member.subtitle}</p>
)}
{member.website && (
<a
href={'https://' + member.website}
className="text-blue-500 hover:underline block text-center"
>
{member.website}
</a>
)}
<div className="mt-2 space-x-4 text-center">
{member.socials.twitter == null ? (
<></>
) : (
<a
href={member.socials.twitter}
target="_blank"
rel="noopener noreferrer"
className="hover:text-blue-500"
>
<FontAwesomeIcon
icon={faTwitter}
className="fa-fw text-gray-400 px-3 md:px-6 py-3 text-2xl hover:text-indigo-600 transition duration-200 hover:scale-125 ease-in-out "
/>
</a>
)}
{member.socials.linkedIn && (
<a
href={member.socials.linkedIn}
target="_blank"
rel="noopener noreferrer"
className="hover:text-blue-500"
>
<FontAwesomeIcon
icon={faLinkedin}
className="fa-fw text-gray-400 px-3 md:px-6 py-3 text-2xl hover:text-indigo-600 transition duration-200 hover:scale-125 ease-in-out "
/>
</a>
)}
{member.socials.github && (
<a
href={member.socials.github}
target="_blank"
rel="noopener noreferrer"
className="hover:text-blue-500"
>
<FontAwesomeIcon
icon={faGithub}
className="fa-fw text-gray-400 px-3 md:px-6 py-3 text-2xl hover:text-indigo-600 transition duration-200 hover:scale-125 ease-in-out "
/>
</a>
)}
</div>
</div>
))}
</div>
);
</div>
</div>
);
};

export default Team;
18 changes: 9 additions & 9 deletions src/components/landing/TeamMember.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
interface TeamMember {
name: string;
image: string;
subtitle?: string;
website?: string;
socials: {
twitter?: string;
linkedIn?: string;
github?: string;
};
name: string;
image: string;
subtitle?: string;
website?: string;
socials: {
twitter?: string;
linkedIn?: string;
github?: string;
};
}

export default TeamMember;
82 changes: 82 additions & 0 deletions src/components/landing/samples.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import { MessageUI } from '../chat';
import { sunsetGradient } from '../misc';


export function ChatHistory(props: { messages: string[] }) {
const messages = props.messages.map((message, index) => {
return (
<MessageUI
key={index}
role={index % 2 === 0 ? 'assistant' : 'user'}
content={message}
/>
);
});
return (
<FloatingGradientBackground>
<div className="bg-white p-4 rounded-lg shadow-xl text-xs text-gray-400 text-left">
{messages}
</div>
</FloatingGradientBackground>
);
}


export function SampleResponseTable() {
return (
<FloatingGradientBackground>
<table className="text-xs min-w-full bg-white rounded-lg shadow-xl text-sm text-gray-400 border-collapse text-left my-0">
<thead>
<tr className="border-b">
<th className="p-1 pl-2 sm:p-2">Name</th>
<th className="p-1 pl-2 sm:p-2">Email</th>
<th className="p-1 pl-2 sm:p-2">Company</th>
<th className="p-1 pl-2 sm:p-2">Title</th>
<th className="p-1 pl-2 sm:p-2">Tech</th>
<th className="p-1 hidden sm:table-cell">GitHub</th>
</tr>
</thead>
<tbody>
<tr>
<td className="p-1 pl-2 sm:p-2 border-b">Jane Doe</td>
<td className="p-1 pl-2 sm:p-2 border-b">[email protected]</td>
<td className="p-1 pl-2 sm:p-2 border-b">Tech Co.</td>
<td className="p-1 pl-2 sm:p-2 border-b">ML Engineer</td>
<td className="p-1 pl-2 sm:p-2 border-b">React, Node, Python</td>
<td className="p-1 pl-2 sm:p-2 border-b hidden sm:table-cell">
jd-70B
</td>
</tr>
<tr>
<td className="p-1 pl-2 sm:p-2 border-b">Bill Smith</td>
<td className="p-1 pl-2 sm:p-2 border-b">[email protected]</td>
<td className="p-1 pl-2 sm:p-2 border-b">Biz Corp.</td>
<td className="p-1 pl-2 sm:p-2 border-b">Marketing Manager</td>
<td className="p-1 pl-2 sm:p-2 border-b">Google Analytics</td>
<td className="p-1 border-b hidden sm:table-cell">-</td>
</tr>
</tbody>
</table>
</FloatingGradientBackground>
);
}

export function FloatingGradientBackground(props: {
children: React.ReactNode;
}) {
return (
<div className={`${sunsetGradient} p-3 md:p-6 rounded-xl shadow-xl`}>
{props.children}
</div>
);
}

export function FloatingTextBox(props: { text: string }) {
return (
<FloatingGradientBackground>
<div className="bg-white p-4 rounded-lg shadow-xl text-xs text-gray-400 text-left">
{props.text}
</div>
</FloatingGradientBackground>
);
}
39 changes: 20 additions & 19 deletions src/components/layout/Page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,26 @@ export default function Page(props: PageProps) {
<h1 className="text-3xl font-bold tracking-tight text-gray-900">
{props.pageTitle}
</h1>
{!props.disableWarning && <div
className="bg-yellow-100 border-l-4 border-yellow-500 text-yellow-900 p-3 mt-4"
role="alert"
>
<p className="text-xs">
<span className="font-bold">Warning</span>: This product is in
early stages of development. Do not use for
sensitive/confidential info. For details, see{' '}
<Link
className="underline hover:"
href="https://github.com/nsbradford/TalkFormAI/blob/main/LICENSE"
target="_blank"
>
terms
</Link>
.
</p>
</div>
}
{!props.disableWarning && (
<div
className="bg-yellow-100 border-l-4 border-yellow-500 text-yellow-900 p-3 mt-4"
role="alert"
>
<p className="text-xs">
<span className="font-bold">Warning</span>: This product is in
early stages of development. Do not use for
sensitive/confidential info. For details, see{' '}
<Link
className="underline hover:"
href="https://github.com/nsbradford/TalkFormAI/blob/main/LICENSE"
target="_blank"
>
terms
</Link>
.
</p>
</div>
)}
</div>
</header>
<main>
Expand Down
Loading

0 comments on commit 148b4a6

Please sign in to comment.