diff --git a/src/components/BreathCircle/index.tsx b/src/components/BreathCircle/index.tsx
new file mode 100644
index 0000000..0461cd5
--- /dev/null
+++ b/src/components/BreathCircle/index.tsx
@@ -0,0 +1,46 @@
+import { useNavigate } from 'react-router-dom'
+import { useTranslation } from 'react-i18next'
+import routes from '@/routes'
+import styles from './styles.module.css'
+import { useEffect, useState } from 'react'
+
+const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))
+
+function BreathCircle(): JSX.Element {
+ const { t } = useTranslation()
+ const navigate = useNavigate()
+ const [text, setText] = useState(t(''))
+ const [render, setRender] = useState(false)
+
+
+ useEffect(() => {
+ const handleNext = () => navigate(routes.client.compatibility())
+ Promise.resolve()
+ .then(() => {
+ setText(t('breathIn'))
+ return sleep(4000)
+ })
+ .then(() => {
+ setText(t('hold'))
+ return sleep(2000)
+ })
+ .then(() => {
+ setText(t('breathOut'))
+ return sleep(4000)
+ })
+ .then(() => {
+ handleNext()
+ setRender((prevState) => !prevState)
+ })
+ }, [t, render, navigate])
+
+ return (
+
+ )
+}
+
+export default BreathCircle
diff --git a/src/components/BreathCircle/styles.module.css b/src/components/BreathCircle/styles.module.css
new file mode 100644
index 0000000..57e49ab
--- /dev/null
+++ b/src/components/BreathCircle/styles.module.css
@@ -0,0 +1,58 @@
+.outer-circle {
+ background-color: #38597f;
+ width: 250px;
+ height: 250px;
+ border-radius: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.inner-circle {
+ position: relative;
+ width: 200px;
+ height: 200px;
+ background-color: #69a8e7;
+ border-radius: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ color: #fff;
+ font-weight: 500;
+ font-size: 20px;
+ animation-name: pulse;
+ animation-duration: 10s;
+ animation-iteration-count: infinite;
+ animation-timing-function: linear;
+ will-change: transform;
+}
+
+@keyframes text {
+ 0% {
+ content: "Breathe in";
+ }
+ 60% {
+ content: "Hold";
+ }
+ 80% {
+ content: "Breathe out";
+ }
+ 100% {
+ content: "Breathe out";
+ }
+}
+
+@keyframes pulse {
+ 0% {
+ transform: scale(0.6);
+ }
+ 40% {
+ transform: scale(1);
+ }
+ 60% {
+ transform: scale(1);
+ }
+ 100% {
+ transform: scale(0.6);
+ }
+}
diff --git a/src/components/BreathPage/index.tsx b/src/components/BreathPage/index.tsx
new file mode 100644
index 0000000..5a271d1
--- /dev/null
+++ b/src/components/BreathPage/index.tsx
@@ -0,0 +1,13 @@
+import styles from './styles.module.css'
+import BreathCircle from '../BreathCircle'
+
+function BreathPage(): JSX.Element {
+
+ return (
+
+ )
+}
+
+export default BreathPage
diff --git a/src/components/BreathPage/styles.module.css b/src/components/BreathPage/styles.module.css
new file mode 100644
index 0000000..d4aa23e
--- /dev/null
+++ b/src/components/BreathPage/styles.module.css
@@ -0,0 +1,11 @@
+.page {
+ position: relative;
+ height: calc(100vh - 50px);
+ max-height: -webkit-fill-available;
+ flex: auto;
+ justify-content: center;
+ display: grid;
+ grid-template-rows: 1fr 96px;
+ justify-items: center;
+ background-color: #01010b;
+}
\ No newline at end of file