Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
62f0dd5
feat: change theme
lapprand Apr 3, 2023
cd52636
feat: change color theme
lapprand Apr 13, 2023
be38883
doc: add preview steps for Vercel
lapprand Apr 13, 2023
cb4f628
feat: change about me section
lapprand Apr 13, 2023
df2ac25
bugfix: revert config changes
lapprand Apr 13, 2023
3531541
feat: add all content to allow customization
lapprand Apr 14, 2023
e619f6c
feat: add new landing text
lapprand Apr 14, 2023
af1ac20
feat: make some sizing changes
lapprand Apr 14, 2023
af7caf4
feat: add routing with markdown files
lapprand Apr 23, 2023
e36f35c
feat: add better example of MD usage
lapprand May 20, 2023
41c07d2
Merge pull request #1 from haim-io/feature/test
lapprand May 25, 2023
9b9e837
feat: add vercel analytics plugin
lapprand May 25, 2023
4edf2e4
feat: swap to test with gatsby-plugin-vercel
lapprand May 26, 2023
93f3a91
feat: add vercel analytics package
lapprand May 26, 2023
87f0874
feat: remove all vercel analytics
lapprand May 26, 2023
936d057
feat: test injecting script
lapprand May 26, 2023
955c46d
feat: remove footer text part
lapprand May 26, 2023
6fe0757
feat: change icon media
lapprand May 29, 2023
e0bb704
Update ai-user-journeys.md
PippoRaimondi Jul 16, 2023
82d2604
feat: add videos section
lapprand Aug 5, 2023
510af5c
fix: remove about us text left padding
lapprand Aug 5, 2023
91c62d4
fix: add aspect-ratio to youtube embed
lapprand Aug 5, 2023
0c9efaf
feat: add social media links
lapprand Aug 5, 2023
f398806
feat: add cover images for posts
lapprand Aug 5, 2023
679eb4e
feat: remove time label
lapprand Aug 5, 2023
d7137dd
feat: remove Protfolio text
lapprand Aug 5, 2023
54487be
feat: update colors
lapprand Aug 6, 2023
cc16a7f
feat: add people section prototype
lapprand Aug 6, 2023
9aa5419
fix: remove tippy
lapprand Aug 7, 2023
ec54a72
chore: remove log
lapprand Aug 7, 2023
375eb71
feat: add images and links
lapprand Aug 7, 2023
ca82620
feat: add modal with description
lapprand Aug 7, 2023
d5a68d8
feat: add people title and image adjustments
lapprand Aug 8, 2023
b70c35d
chore: update people data
lapprand Aug 8, 2023
eee3a1a
chore: update titles
lapprand Aug 8, 2023
693924c
Merge pull request #2 from haim-io/people
lapprand Aug 8, 2023
bc129e4
update pictures
PippoRaimondi Aug 14, 2023
6fe7f58
Delete wrong format
PippoRaimondi Aug 14, 2023
e660644
Filippo new picture
PippoRaimondi Aug 14, 2023
93d0982
Update Team.tsx
PippoRaimondi Aug 14, 2023
5224fe5
Update sam picture
PippoRaimondi Aug 14, 2023
ff60d27
Sam picture yellow
PippoRaimondi Aug 14, 2023
8aa5409
Delete old picture
PippoRaimondi Aug 14, 2023
e6c9655
feat: set people cards as same height
lapprand Aug 18, 2023
537c23a
feat: update colors
lapprand Aug 19, 2023
de4696a
fix: revert colors and add margins
lapprand Aug 19, 2023
b9a67d0
fix: post text adjustments
lapprand Aug 19, 2023
76d7bf8
fix: set team name text min height for mobile
lapprand Aug 20, 2023
363bdf4
fix: set additional screen size for team images
lapprand Aug 20, 2023
9a2958d
feat: add mobile navigation menu
lapprand Aug 20, 2023
353c8f0
fix: override rebass margin
lapprand Aug 20, 2023
767f231
chore: move posts and update date
lapprand Aug 20, 2023
34e4cc6
chore: disable project type and social links
lapprand Aug 20, 2023
e3ddd2f
chore: set notch back and fix mobile card width
lapprand Aug 20, 2023
c4bc2ba
Update Videos.tsx
PippoRaimondi Aug 21, 2023
9bfb702
Update Videos.tsx
PippoRaimondi Aug 21, 2023
e361905
feat: add back button on post page
lapprand Aug 21, 2023
6c90460
chore: change team description
lapprand Aug 21, 2023
c7f4b71
Update ai-user-journeys.md
PippoRaimondi Aug 21, 2023
495ba9a
Update landing page
PippoRaimondi Apr 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,5 @@ public/
# mac FS
.DS_Store
.vscode/
.vercel
.env*.local
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,15 @@
[![Netlify Status](https://api.netlify.com/api/v1/badges/f532a32d-4fc1-441d-aa28-cdc5e2c2e79c/deploy-status)](https://app.netlify.com/sites/gatsby-starter-mate/deploys)

> Gatsby starter for [`gatsby-theme-mate`](https://github.com/EmaSuriano/gatsby-theme-mate). An accessible and fast portfolio starter for Gatsby integrated with Contentful CMS.
## How to preview with Vercel

Vercel automatically creates a deployment for pushed branches.
1. Go to the deployments page (https://vercel.com/haim-engineering/haim-io/deployments)
2. After the branch push, you'll find your deployment running on that list.
3. Click on the deployment and then click one of the URLs provided under the **DOMAINS** section.

The target audience are Developers 💻 and Tech Writers ✍️.

**[Check the Demo ✨](https://gatsby-starter-mate.netlify.app/)**

## Why? 🤔

Expand Down
11 changes: 11 additions & 0 deletions gatsby-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@ const plugins = [
spaceId: SPACE_ID,
},
},
{
resolve: `gatsby-source-filesystem`,
options: {
name: `content`,
path: `${__dirname}/src/content`,
},
},
{
resolve: `gatsby-transformer-remark`,
options: {},
}
];

if (ANALYTICS_ID) {
Expand Down
Binary file modified icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added media/filippo.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added media/furlan.jpeg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified media/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added media/sam.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@
"dependencies": {
"gatsby": "^4.24.8",
"gatsby-plugin-google-analytics": "^4.24.0",
"gatsby-source-filesystem": "^5.9.0",
"gatsby-theme-mate": "^2.1.1",
"gatsby-transformer-remark": "^6.9.0",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
Expand Down
40 changes: 40 additions & 0 deletions src/content-backup/ai-user-journeys.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
slug: "ai-visual-tests"
date: "2023-08-20"
title: "Visual Tests Powered by AI"
cover: "https://images.ctfassets.net/51dzuuls8jkp/3AfdhSdhGvU5npgGRVKH3S/cb928398471578dbd84e438e0826859e/0-1.jpg"
---

# Visual Tests Powered by AI: A Comparison of Haim's Solution with Conventional Visual Testing Tools

## Background

In today's fast-paced software development landscape, visual testing plays a crucial role in ensuring the quality and user experience of web and mobile applications. Visual testing involves verifying the visual aspects of an application, such as layout, colors, fonts, and images, to identify any visual regressions or inconsistencies.

## Problem

While conventional visual testing tools like Percy or Applitools have streamlined the visual testing process, there is still room for improvement in terms of accuracy, speed, and ease of use. These tools typically rely on pixel-by-pixel comparisons or image recognition algorithms, which may still produce false negatives or struggle with dynamic and interactive content.

## Implementation

Haim, a leading innovator in AI-powered software testing solutions, has developed a cutting-edge visual testing tool that leverages advanced Artificial Intelligence (AI) techniques to revolutionize the way visual testing is performed. By training sophisticated deep learning models on extensive datasets of visual elements and expected outcomes, Haim's solution can intelligently identify even the most subtle visual anomalies and regressions with unparalleled accuracy and speed.

## Haim's AI-powered Visual Testing vs Conventional Visual Testing Tools

The adoption of Haim's AI-powered visual testing tool offers several distinct advantages over conventional visual testing tools. Firstly, Haim's solution goes beyond traditional pixel comparisons and image recognition by employing advanced AI algorithms that analyze the underlying structure and semantics of the visual elements. This enables more robust detection of visual regressions, including those related to dynamic and interactive content.

Additionally, Haim's tool significantly reduces false negatives, saving valuable time and effort that would otherwise be spent investigating and validating potential visual issues. The AI models employed by Haim continuously learn and improve over time, ensuring adaptive and accurate results, even as the application evolves.

Moreover, Haim's tool integrates seamlessly into the development workflow, providing an intuitive and user-friendly interface that simplifies test creation, management, and reporting. The streamlined process reduces the learning curve and empowers development teams to effortlessly incorporate visual testing into their existing CI/CD pipelines.

## How Haim's Solution Improves Cost-effectiveness Compared to Conventional Visual Testing Tools

Implementing Haim's AI-powered visual testing tool leads to significant cost savings compared to conventional visual testing methods. By reducing false negatives and providing accurate and reliable results, Haim's solution minimizes the time and effort spent on investigating and resolving visual issues. This leads to more efficient development cycles, faster time-to-market, and reduced maintenance and support costs.

Furthermore, Haim's tool optimizes resource utilization by automating the visual testing process. With faster and more accurate test execution, development teams can allocate their valuable human resources to more critical tasks, enhancing overall productivity and cost-effectiveness.

## Conclusion

Haim's AI-powered visual testing tool represents a breakthrough in software quality assurance. By leveraging advanced AI algorithms, Haim enhances the accuracy, reliability, and speed of visual testing. Compared to conventional visual testing tools, Haim's solution offers a more comprehensive and intelligent approach to detecting visual anomalies, including those related to dynamic and interactive content.

Embracing Haim's tool empowers development teams to deliver exceptional visual quality, reduce false negatives, and save valuable time and resources. With streamlined workflows and cost-effective processes, organizations can ensure exceptional user experiences while accelerating development cycles and reducing overall maintenance costs.
6 changes: 6 additions & 0 deletions src/content-backup/devops-culture.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
slug: "devops-culture"
date: "2022-11-24"
title: "Building devops culture in a traditional organisation"
cover: "https://images.ctfassets.net/51dzuuls8jkp/71z946FnyXeAfYJgtMckVN/2660426dba9e0ba6b29eceb18ea2935d/growtika-f7uCQxhucw4-unsplash.jpg"
---
6 changes: 6 additions & 0 deletions src/content-backup/low-cost-ui-tests.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
slug: "low-cost-ui-tests"
date: "2022-11-24"
title: "Thousands of reliable UI tests in minutes and at low cost"
cover: "https://images.ctfassets.net/51dzuuls8jkp/4lJYEYIagGzR43V1vElXHo/c6ffc9d092c500240c56dffb4f925731/alvaro-reyes-qWwpHwip31M-unsplash.jpg"
---
7 changes: 7 additions & 0 deletions src/gatsby-theme-mate/colors.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"text": "#ffffff",
"background": "#00838f",
"muted": "#546e7a",
"primary": "#e0f2f1",
"secondary": "#90a4ae"
}
38 changes: 38 additions & 0 deletions src/gatsby-theme-mate/components/Card.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import styled from 'styled-components';
import { Card as CardRebass } from 'rebass/styled-components';

type CardContainerProps = {
minWidth: string;
};

export const CardContainer = styled.div<CardContainerProps>`
display: grid;
grid-gap: 30px;

grid-template-columns: repeat(
auto-fill,
minmax(${({ minWidth }) => minWidth}, 1fr)
);
justify-items: center;

@media only screen and (max-width: 400px) {
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
}
`;

export const Card = styled(CardRebass).attrs({
bg: '#333333',
boxShadow: 0,
})`
position: relative;
box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2);
transition: all 0.25s;
top: 0;
height: 100%;
border-radius: 8px;

&:hover {
top: -10px;
box-shadow: 0 12px 16px rgba(0, 0, 0, 0.2);
}
`;
52 changes: 52 additions & 0 deletions src/gatsby-theme-mate/components/Footer.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import React from 'react';
import styled from 'styled-components';
import { Text, Box, Flex } from 'rebass/styled-components';
import { Fade } from 'react-awesome-reveal';
import SocialLink from './SocialLink';
import Link from './Link';
import { useSiteQuery } from '../queries/useSiteQuery';
import { CONTENTFUL_URL, GATSBY_URL, NETLIFY_URL } from '../utils/constants';

const Footer = () => {
const { name, socialLinks } = useSiteQuery();

return (
<Box p={[2, 3]} backgroundColor="primary" id="footer" as="footer">
<FooterContainer>
<Fade direction="left" triggerOnce>
<Text fontSize={[2, 3]} color="background">
<span>{`${name}`}</span>
</Text>
</Fade>
<Flex>
<Fade direction="right" triggerOnce cascade damping={0.5}>
{socialLinks.map((sl) => (
<Box mx={[2, 3]} fontSize={[4, 5]} key={sl.name}>
<SocialLink {...sl} invert />
</Box>
))}
</Fade>
</Flex>
</FooterContainer>
</Box>
);
};

const FooterContainer = styled.div`
max-width: 1366px;
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
margin: auto;

@media (max-width: 400px) {
flex-direction: column-reverse;

& > * {
margin-bottom: 10px;
}
}
`;

export default Footer;
102 changes: 102 additions & 0 deletions src/gatsby-theme-mate/components/Header.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import React, { useState } from 'react'
import Headroom from 'react-headroom'
import { Button, Box, Link as RebassLink, Flex, Image } from 'rebass/styled-components'
import styled from 'styled-components'
import Link from './Link'
import { useHelmetQuery } from '../queries/useHelmetQuery'
import { SECTION } from '../utils/constants'
import { getSectionHref } from '../utils/helpers'
import Modal from './Modal'
import { getIconDefinition } from '../utils/icons'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'

const Header = () => {
const { profile } = useHelmetQuery()

const [showModal, setShowModal] = useState(false)

const handleClick = () => {
setShowModal(true)
}

const handleClose = () => {
setShowModal(false)
}

const actionBar = (
<div>
<Button color='#000000' className='modal-btn' onClick={handleClose} primary>
Close
</Button>
</div>
)

const navIcon = getIconDefinition('bars')

const mobileLinkClick = () => {
setShowModal(false)
}

return (
<StyledHeadroom>
<Flex
flexWrap="wrap"
justifyContent="space-between"
alignItems="center"
px={3}
>
<RebassLink href={`#${getSectionHref(SECTION.home)}`} variant="empty">
<Flex justifyContent="center">
<Image
src={profile.bigIcon.src}
height={['60px', '80px']}
width={['60px', '80px']}
alt="Portfolio Logo"
p={2}
css={{ borderRadius: '20px', cursor: 'pointer' }}
/>
</Flex>
</RebassLink>
{showModal && <Modal onClose={handleClose} actionBar={actionBar}>
<SectionLinks className='mobile-nav-links' onLinkClick={mobileLinkClick} />
</Modal>}
<Button color='background' className='nav-btn' onClick={handleClick}>
{navIcon && <FontAwesomeIcon size='lg' icon={navIcon} title='Menu' />}
{!navIcon && 'Menu'}
</Button>
<SectionLinks className='desktop-nav-links' />
</Flex>
</StyledHeadroom>
)
}

const SectionLinks = ({ className, onLinkClick }: { className?: string, onLinkClick?: any }) => {
return (
<Box className={className} mr={[0, 3, 5]}>
{(Object.keys(SECTION) as Array<keyof typeof SECTION>)
.filter((id) => id !== 'home')
.map((id) => (
<Box key={id} ml={[2, 3]} color="background" fontSize={[2, 3]}>
<Link href={`#${id}`} tabIndex={0} onClick={() => onLinkClick?.(id)}>
{SECTION[id]}
</Link>
</Box>
))}
</Box>
)
}

const StyledHeadroom = styled(Headroom)`
* {
transition: background-color 0.1s ease;
}

.headroom--pinned {
background-color: ${({ theme }) => theme.colors.primary};
}

position: absolute;
width: 100%;
`

export default Header
57 changes: 57 additions & 0 deletions src/gatsby-theme-mate/components/Helmet.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import React from 'react';
import { Helmet as ReactHelmet } from 'react-helmet';
import { withTheme } from 'styled-components';
import { Theme } from '../types';
import { useHelmetQuery } from '../queries/useHelmetQuery';

type Props = {
theme: Theme;
};

const Helmet = ({ theme }: Props) => {
const { name, description, profile } = useHelmetQuery();
const title = name;

return (
<ReactHelmet htmlAttributes={{ lang: 'en' }}>
<meta charSet="utf-8" />
<title>{title}</title>
<meta name="description" content={description} />
<link rel="shortcut icon" href={`https:${profile.favicon32.src}`} />
<meta name="theme-color" content={theme.colors.background} />
<meta name="image" content={`https:${profile.favicon32.src}`} />
<meta itemProp="name" content={title} />
<meta itemProp="description" content={description} />
<meta itemProp="image" content={`https:${profile.favicon32.src}`} />
<meta name="og:title" content={title} />
<meta name="og:description" content={description} />
<meta name="og:image" content={`https:${profile.bigIcon.src}`} />
<meta name="og:site_name" content={title} />
<meta name="og:locale" content="en_US" />
<meta name="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content={title} />
<meta name="twitter:description" content={description} />
<meta name="twitter:image" content={`https:${profile.bigIcon.src}`} />
<meta name="twitter:image:src" content={`https:${profile.bigIcon.src}`} />
<link
rel="apple-touch-icon"
sizes="180x180"
href={`https:${profile.appleIcon.src}`}
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href={`https:${profile.favicon32.src}`}
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href={`https:${profile.favicon16.src}`}
/>
</ReactHelmet>
);
};
export default withTheme(Helmet);
16 changes: 16 additions & 0 deletions src/gatsby-theme-mate/components/Hide.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Queries } from '@rebass/preset';
import styled from 'styled-components';

type Props = {
query: keyof Queries;
};

const Hide = styled.div<Props>`
${({ query, theme }) => ({
[theme.queries[query]]: {
display: 'none',
},
})}
`;

export default Hide;
Loading
Loading