├── .watchmanconfig ├── .gitattributes ├── app.json ├── Presentation.pdf ├── .eslintrc.js ├── babel.config.js ├── android ├── app │ ├── debug.keystore │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── values │ │ │ │ │ ├── strings.xml │ │ │ │ │ └── styles.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ └── mipmap-xxxhdpi │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ └── ic_launcher_round.png │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── instagramclone │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ └── MainApplication.java │ │ │ └── AndroidManifest.xml │ │ └── debug │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── instagramclone │ │ │ └── ReactNativeFlipper.java │ ├── proguard-rules.pro │ ├── build_defs.bzl │ ├── _BUCK │ └── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── settings.gradle ├── build.gradle ├── gradle.properties ├── gradlew.bat └── gradlew ├── src ├── assets │ └── images │ │ └── logo.png ├── components │ ├── UserStoriesPreview │ │ ├── styles.js │ │ └── index.js │ ├── UserStoryPreview │ │ ├── styles.js │ │ └── index.js │ ├── Post │ │ ├── components │ │ │ ├── Body │ │ │ │ ├── index.js │ │ │ │ └── styles.js │ │ │ ├── Header │ │ │ │ ├── styles.js │ │ │ │ └── index.js │ │ │ └── Footer │ │ │ │ ├── styles.js │ │ │ │ └── index.js │ │ └── index.js │ ├── ProfilePicture │ │ ├── styles.js │ │ └── index.js │ └── Feed │ │ └── index.js ├── screens │ ├── HomeScreen │ │ └── index.js │ ├── ProfileScreen │ │ └── index.js │ ├── DiscoveryScreen │ │ └── index.js │ ├── CreatePostScreen │ │ └── index.js │ ├── NotificationsScreen │ │ └── index.js │ └── StoryScreen │ │ ├── styles.js │ │ └── index.js ├── App.js ├── router │ ├── index.js │ ├── home.routes.js │ └── bottomHomeNavigator.routes.js ├── graphql │ ├── queries.js │ ├── subscriptions.js │ └── mutations.js └── data │ └── stories.js ├── amplify ├── backend │ ├── api │ │ └── instagramclone │ │ │ ├── transform.conf.json │ │ │ ├── parameters.json │ │ │ ├── schema.graphql │ │ │ └── stacks │ │ │ └── CustomResources.json │ ├── backend-config.json │ └── auth │ │ └── instagramclonee9ad3f24 │ │ ├── parameters.json │ │ └── instagramclonee9ad3f24-cloudformation-template.yml ├── .config │ └── project-config.json └── team-provider-info.json ├── ios ├── InstagramClone │ ├── Images.xcassets │ │ ├── Contents.json │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── AppDelegate.h │ ├── main.m │ ├── AppDelegate.m │ ├── Info.plist │ └── LaunchScreen.storyboard ├── InstagramClone.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── InstagramCloneTests │ ├── Info.plist │ └── InstagramCloneTests.m ├── InstagramClone-tvOSTests │ └── Info.plist ├── Podfile ├── InstagramClone-tvOS │ └── Info.plist ├── InstagramClone.xcodeproj │ ├── xcshareddata │ │ └── xcschemes │ │ │ ├── InstagramClone.xcscheme │ │ │ └── InstagramClone-tvOS.xcscheme │ └── project.pbxproj └── Podfile.lock ├── .buckconfig ├── .prettierrc.js ├── amplify.json ├── index.js ├── __tests__ └── App-test.js ├── metro.config.js ├── .graphqlconfig.yml ├── LICENSE ├── package.json ├── .gitignore ├── .flowconfig └── popuplateApi.js /.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "InstagramClone", 3 | "displayName": "InstagramClone" 4 | } -------------------------------------------------------------------------------- /Presentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/Presentation.pdf -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native-community', 4 | }; 5 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:metro-react-native-babel-preset'], 3 | }; 4 | -------------------------------------------------------------------------------- /android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/debug.keystore -------------------------------------------------------------------------------- /src/assets/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/src/assets/images/logo.png -------------------------------------------------------------------------------- /amplify/backend/api/instagramclone/transform.conf.json: -------------------------------------------------------------------------------- 1 | { 2 | "Version": 5, 3 | "ElasticsearchWarning": true 4 | } -------------------------------------------------------------------------------- /android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | InstagramClone 3 | 4 | -------------------------------------------------------------------------------- /ios/InstagramClone/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | bracketSpacing: false, 3 | jsxBracketSameLine: true, 4 | singleQuote: true, 5 | trailingComma: 'all', 6 | }; 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VadimNotJustDev/InstagramClone/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /amplify/backend/api/instagramclone/parameters.json: -------------------------------------------------------------------------------- 1 | { 2 | "AppSyncApiName": "instagramclone", 3 | "DynamoDBBillingMode": "PAY_PER_REQUEST", 4 | "DynamoDBEnableServerSideEncryption": false 5 | } -------------------------------------------------------------------------------- /amplify.json: -------------------------------------------------------------------------------- 1 | { 2 | "features": 3 | { 4 | "graphqltransformer": 5 | { 6 | "transformerversion": 5 7 | }, 8 | "keytransformer": 9 | { 10 | "defaultquery": true 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'InstagramClone' 2 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) 3 | include ':app' 4 | -------------------------------------------------------------------------------- /src/components/UserStoriesPreview/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | const styles = StyleSheet.create({ 4 | container: { 5 | marginBottom: 15, 6 | } 7 | }); 8 | 9 | export default styles; 10 | -------------------------------------------------------------------------------- /ios/InstagramClone/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : UIResponder 5 | 6 | @property (nonatomic, strong) UIWindow *window; 7 | 8 | @end 9 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /ios/InstagramClone/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char * argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/components/UserStoryPreview/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | const styles = StyleSheet.create({ 4 | container: { 5 | 6 | }, 7 | name: { 8 | textAlign: 'center', 9 | } 10 | }); 11 | 12 | export default styles; 13 | -------------------------------------------------------------------------------- /src/components/Post/components/Body/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Image } from 'react-native'; 3 | import styles from './styles'; 4 | 5 | const Body = ({ imageUri }) => ( 6 | 7 | ) 8 | 9 | export default Body; 10 | -------------------------------------------------------------------------------- /src/screens/HomeScreen/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { SafeAreaView } from 'react-native'; 3 | import Feed from '../../components/Feed'; 4 | 5 | const HomeScreen = () => ( 6 | 7 | 8 | 9 | ) 10 | 11 | export default HomeScreen; 12 | -------------------------------------------------------------------------------- /src/components/Post/components/Body/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet, Dimensions } from 'react-native'; 2 | 3 | const styles = StyleSheet.create({ 4 | image: { 5 | width: Dimensions.get('window').width, 6 | height: Dimensions.get('window').width, 7 | } 8 | }) 9 | 10 | export default styles; 11 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /ios/InstagramClone.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/InstagramClone.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import {AppRegistry} from 'react-native'; 6 | import Amplify from 'aws-amplify' 7 | import App from './src/App'; 8 | import {name as appName} from './app.json'; 9 | import config from './aws-exports' 10 | 11 | Amplify.configure(config) 12 | 13 | AppRegistry.registerComponent(appName, () => App); 14 | -------------------------------------------------------------------------------- /__tests__/App-test.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import 'react-native'; 6 | import React from 'react'; 7 | import App from '../src/App'; 8 | 9 | // Note: test renderer must be required after react-native. 10 | import renderer from 'react-test-renderer'; 11 | 12 | it('renders correctly', () => { 13 | renderer.create(); 14 | }); 15 | -------------------------------------------------------------------------------- /src/screens/ProfileScreen/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View, Text } from 'react-native'; 3 | 4 | const ProfileScreen = () => ( 5 | 6 | Profile 7 | 8 | ) 9 | 10 | export default ProfileScreen; 11 | -------------------------------------------------------------------------------- /src/screens/DiscoveryScreen/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View, Text } from 'react-native'; 3 | 4 | const DiscoveryScreen = () => ( 5 | 6 | Discovery 7 | 8 | ) 9 | 10 | export default DiscoveryScreen; 11 | -------------------------------------------------------------------------------- /metro.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Metro configuration for React Native 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | */ 7 | 8 | module.exports = { 9 | transformer: { 10 | getTransformOptions: async () => ({ 11 | transform: { 12 | experimentalImportSupport: false, 13 | inlineRequires: false, 14 | }, 15 | }), 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /src/screens/CreatePostScreen/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View, Text } from 'react-native'; 3 | 4 | const CreatePostScreen = () => ( 5 | 6 | Create Post 7 | 8 | ) 9 | 10 | export default CreatePostScreen; 11 | -------------------------------------------------------------------------------- /src/screens/NotificationsScreen/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View, Text } from 'react-native'; 3 | 4 | const NotificationsScreen = () => ( 5 | 6 | Notifications 7 | 8 | ) 9 | 10 | export default NotificationsScreen; 11 | -------------------------------------------------------------------------------- /src/components/ProfilePicture/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | const styles = StyleSheet.create({ 4 | container: { 5 | 6 | margin: 7, 7 | borderRadius: 40, 8 | borderWidth: 3, 9 | borderColor: "#ae22e0", 10 | }, 11 | image: { 12 | borderRadius: 40, 13 | borderWidth: 1, 14 | borderColor: "#ffffff", 15 | } 16 | }); 17 | 18 | export default styles; 19 | -------------------------------------------------------------------------------- /.graphqlconfig.yml: -------------------------------------------------------------------------------- 1 | projects: 2 | instagramclone: 3 | schemaPath: amplify/backend/api/instagramclone/build/schema.graphql 4 | includes: 5 | - src/graphql/**/*.js 6 | excludes: 7 | - ./amplify/** 8 | extensions: 9 | amplify: 10 | codeGenTarget: javascript 11 | generatedFileName: '' 12 | docsFilePath: src/graphql 13 | extensions: 14 | amplify: 15 | version: 3 16 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/ProfilePicture/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Image, View } from 'react-native'; 3 | import styles from './styles'; 4 | 5 | const ProfilePicture = ({ uri, size = 70 }) => ( 6 | 7 | 11 | 12 | ) 13 | 14 | export default ProfilePicture; 15 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/instagramclone/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.instagramclone; 2 | 3 | import com.facebook.react.ReactActivity; 4 | 5 | public class MainActivity extends ReactActivity { 6 | 7 | /** 8 | * Returns the name of the main component registered from JavaScript. This is used to schedule 9 | * rendering of the component. 10 | */ 11 | @Override 12 | protected String getMainComponentName() { 13 | return "InstagramClone"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -------------------------------------------------------------------------------- /amplify/.config/project-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "projectName": "InstagramClone", 3 | "version": "3.0", 4 | "frontend": "javascript", 5 | "javascript": { 6 | "framework": "react-native", 7 | "config": { 8 | "SourceDir": "/", 9 | "DistributionDir": "/", 10 | "BuildCommand": "npm run-script build", 11 | "StartCommand": "npm run-script start" 12 | } 13 | }, 14 | "providers": [ 15 | "awscloudformation" 16 | ] 17 | } -------------------------------------------------------------------------------- /src/components/Post/components/Header/styles.js: -------------------------------------------------------------------------------- 1 | import { StyleSheet } from 'react-native'; 2 | 3 | const styles = StyleSheet.create({ 4 | container: { 5 | flexDirection: 'row', 6 | justifyContent: 'space-between', 7 | alignItems: 'center' 8 | }, 9 | left: { 10 | flexDirection: 'row', 11 | }, 12 | right: { 13 | marginRight: 15 14 | }, 15 | name: { 16 | alignSelf: 'center', 17 | fontWeight: 'bold', 18 | color: '#3c3c3c' 19 | } 20 | }); 21 | 22 | export default styles; 23 | -------------------------------------------------------------------------------- /src/components/Post/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { View } from 'react-native'; 3 | 4 | import Header from './components/Header'; 5 | import Body from './components/Body'; 6 | import Footer from './components/Footer'; 7 | 8 | const Post = ({ post }) => ( 9 | 10 |
11 | 12 |