diff --git a/src/layouts/pages/PetName/index.js b/src/layouts/pages/PetName/index.js
new file mode 100644
index 00000000..b970a0d8
--- /dev/null
+++ b/src/layouts/pages/PetName/index.js
@@ -0,0 +1,62 @@
+import { Component } from 'pet-dex-utilities';
+import TextInput from '../../../components/TextInput';
+import UploadImage from '../../../components/UploadImage';
+import Button from '../../../components/Button';
+import './index.scss';
+
+const events = ['submit'];
+
+const html = `
+
+
+
+
Qual o nome do seu bichinho?
+
+
+
+
+`;
+
+export default function PetName() {
+ Component.call(this, { html, events });
+
+ const $inputContainer = this.selected.get('input-container');
+ const $uploadImage = this.selected.get('upload-image-container');
+ const $buttonContainer = this.selected.get('button-container');
+
+ this.input = new TextInput({
+ placeholder: 'Nome do Pet',
+ });
+
+ this.upload = new UploadImage();
+ this.button = new Button({
+ text: 'Continuar',
+ isFullWidth: true,
+ isDisabled: false,
+ });
+
+ const updateButtonVisibility = () => {
+ const input = this.input.getValue();
+ const image = this.upload.getImage();
+
+ this.button.setIsDisabled(!(input && image));
+ };
+ updateButtonVisibility();
+
+ this.upload.listen('value:change', updateButtonVisibility);
+ this.input.listen('value:change', updateButtonVisibility);
+
+ this.button.listen('click', () => {
+ const image = this.upload.getImage();
+ const name = this.input.getValue();
+ this.emit('submit', { image, name });
+ });
+
+ this.upload.mount($uploadImage);
+ this.input.mount($inputContainer);
+ this.button.mount($buttonContainer);
+}
+
+PetName.prototype = Object.assign(PetName.prototype, Component.prototype);
diff --git a/src/layouts/pages/PetName/index.scss b/src/layouts/pages/PetName/index.scss
new file mode 100644
index 00000000..abf4411f
--- /dev/null
+++ b/src/layouts/pages/PetName/index.scss
@@ -0,0 +1,70 @@
+@use '~styles/breakpoints.scss' as breakpoints;
+@use '~styles/colors.scss' as colors;
+@use '~styles/fonts.scss' as fonts;
+
+.pet-name {
+ display: flex;
+ flex-direction: column;
+
+ &__container {
+ width: 100%;
+
+ margin-bottom: 2.4rem;
+ }
+
+ &__image {
+ max-width: 18.6rem;
+
+ margin: 5rem auto;
+ }
+
+ &__title {
+ font-family: fonts.$primaryFont;
+ color: colors.$gray800;
+ text-align: center;
+ font-size: fonts.$xs;
+ font-weight: fonts.$medium;
+
+ margin: 7rem auto 3rem;
+ }
+
+ &__input {
+ width: min(100%, 42rem);
+
+ margin: 0 auto;
+ }
+
+ &__footer {
+ width: 100%;
+
+ display: flex;
+
+ justify-content: center;
+
+ margin-top: auto;
+ }
+
+ &__button {
+ width: min(100%, 42rem);
+ }
+}
+
+@include breakpoints.from1024 {
+ .pet-name {
+ align-items: center;
+
+ &__container {
+ margin-bottom: 0;
+ }
+
+ &__title {
+ font-size: fonts.$sm;
+
+ margin-top: 15rem;
+ }
+
+ &__button {
+ margin-top: 4rem;
+ }
+ }
+}
diff --git a/src/stories/PetName.stories.js b/src/stories/PetName.stories.js
new file mode 100644
index 00000000..7b957478
--- /dev/null
+++ b/src/stories/PetName.stories.js
@@ -0,0 +1,14 @@
+import PetRegister from '~layouts/pages/PetName';
+
+export default {
+ title: 'Pages/PetName',
+
+ render: (args = {}) => {
+ const $container = document.createElement('div');
+ const component = new PetRegister(args);
+ component.mount($container);
+ return $container;
+ },
+};
+
+export const Default = {};