An Instagram clone integrated with a clone of Twitter's direct messages
Live demo: https://instaparody.vercel.app
The demo accounts:
demo_01@email.com
demo_02@email.com
demo_03@email.com
The password for each account:
00000000
or register with an email address without the need for verification.
Customize your profile by adding a profile photo, updating your introduction, and selecting your preferences
- All pages and modals are designed to be responsive across all screen sizes. Squeeze them as you like.
- The subscript under each message you send indicates whether it has been sent or seen by your contact.
- The alert lasts a few seconds to inform users what was done in success or inappropriately.
- Vue 3
- Vue Router
- Pinia
- Tailwind CSS
- Font Awesome
- Firestore
- Storage
- Authentication
Vercel
Vite
Expand
src
│ App.vue
│ main.js
│ routes.js
│ style.css
│
├─assets
│ │ base.css
│ │ vue.svg
│ │
│ └─icons
│ sprite.svg
│
├─components
│ │ AvatarLink.vue
│ │ CommentInput.vue
│ │ CommentsList.vue
│ │ ConfirmModal.vue
│ │ DisplayNameLink.vue
│ │ ImageCarousel.vue
│ │ LikesList.vue
│ │ Logo.vue
│ │ NavBar.vue
│ │ NoSuchPost.vue
│ │ PostDetails.vue
│ │ PostImageItem.vue
│ │ PostImageList.vue
│ │ PostItem.vue
│ │ PostItemLoader.vue
│ │ PostList.vue
│ │ Search.vue
│ │ SearchMobile.vue
│ │ SearchResults.vue
│ │ TheAvatar.vue
│ │ TheButton.vue
│ │ TheFooter.vue
│ │ TheIcon.vue
│ │ TheLabel.vue
│ │ TheLayout.vue
│ │ TheModal.vue
│ │ TheTooltip.vue
│ │ UserCard.vue
│ │ UserInfo.vue
│ │ UserPlate.vue
│ │ UserSkeletonLoader.vue
│ │
│ ├─Alert
│ │ Alert.vue
│ │ AlertContent.vue
│ │
│ ├─Messages
│ │ Chat.vue
│ │ ConfirmDeleteMessage.vue
│ │ Contacts.vue
│ │ ContainerTab.vue
│ │ DateTag.vue
│ │ DeleteButton.vue
│ │ EmojiPicker.vue
│ │ ImagePreview.vue
│ │ ImageViewer.vue
│ │ MessageBubble.vue
│ │ MessageContent.vue
│ │ MessageDragAndDrop.vue
│ │ MessageInput.vue
│ │ Messages.vue
│ │ MessagesContainer.vue
│ │ MoreButton.vue
│ │ MoreMenu.vue
│ │ NewMessageIndicator.vue
│ │ RepliedBubble.vue
│ │ ReplyPreview.vue
│ │ SearchPeople.vue
│ │ TobottomButton.vue
│ │
│ ├─NavBar
│ │ LoginButton.vue
│ │ NavBarMobile.vue
│ │ NavBarSliding.vue
│ │ ProfileIconMenu.vue
│ │
│ ├─PostButtons
│ │ CommentButton.vue
│ │ ConfirmDeleteOrDiscard.vue
│ │ LikeButton.vue
│ │ LikesCountBanner.vue
│ │ PostEdit.vue
│ │ postMoreButton.vue
│ │ postMoreMenu.vue
│ │ SaveButton.vue
│ │ TimeBanner.vue
│ │
│ ├─PostUpload
│ │ AlertBanner.vue
│ │ ConfirmDiscardPost.vue
│ │ DragAndDropInput.vue
│ │ InputAlert.vue
│ │ PostUpload.vue
│ │
│ └─ProfileEditing
│ ChangePhoto.vue
│ ChangePhotoMenu.vue
│ DropdownMenu.vue
│ GenderSelect.vue
│ IntroInput.vue
│ TheUploadBtn.vue
│
├─firebase
│ auth.js
│ firebase.js
│ firestore.js
│ storage.js
│
├─modules
│ position.js
│
├─pages
│ ChangePasswordPage.vue
│ CommentsPage.vue
│ HomePage.vue
│ LikesPage.vue
│ LoginPage.vue
│ MessagesPage.vue
│ NotAvailablePage.vue
│ PostDetailsPage.vue
│ ProfileEditingPage.vue
│ ProfilePage.vue
│ SearchPage.vue
│ SignUpPage.vue
│
├─stores
│ alert.js
│ comment.js
│ mediaQuery.js
│ message.js
│ post.js
│ user.js
│
└─utils
date.js
request.js
validation.js







