Create a Resume Builder using React-Native

Last Updated : 23 Jul, 2025

A resume is like a personal marketing document that shows off your skills, work history, and achievements to a potential employer. Resume builder apps help you create this document more easily. In this article, we are going to implement a resume builder app using React Native.

To give you a better idea of what we’re going to create, let’s watch a demo video.

Demo Video

Playground

Note: This Section is to interact with the app which you are going to build.


Prerequisite

Approach to create a Resume Builder

  • In this App, we will create a resume builder app in React Native. This app includes two screens.
  • The first screen of the app contains various input fields containing prompts for the user to provide information relevant to their resume, including their name, contact details, and past work experience.
  • After submission of the form, the Resume builder app will display the resume on a second screen.

Step-by-Step Implementation

Step 1: Create a React Native Project

Now, create a project with the following command.

npx create-expo-app app-name --template

Note: Replace the app-name with your app name for example : react-native-demo-app

Next, you might be asked to choose a template. Select one based on your preference as shown in the image below. I am selecting the blank template because it will generate a minimal app that is as clean as an empty canvas in JavaScript.

It completes the project creation and displays a message: "Your Project is ready!" as shown in the image below.

Now go into your project folder, i.e., react-native-demo

cd app-name

Project Structure:

Step 2: Run  Application

Start the server by using the following command.

npx expo start

Then, the application will display a QR code.

For the Android users,

  • For the Android Emulator, press " a" as mentioned in the image below.
  • For the Physical Device, download the " Expo Go " app from the Play Store. Open the app, and you will see a button labeled " Scan QR Code. " Click that button and scan the QR code; it will automatically build the Android app on your device.

For iOS users, simply scan the QR code using the Camera app.

If you're using a web browser, it will provide a local host link that you can use as mentioned in the image below.

Step 3: Updated Dependencies

The updated dependencies in the package.json file will look like:

"dependencies": {
"expo-constants": "~17.1.6",
"@expo/vector-icons": "^14.1.0",
"react-native-paper": "5.14.5",
"react-native-screens": "4.11.1",
"@react-navigation/native": "7.1.14",
"@react-navigation/native-stack": "7.3.21",
"react-native-safe-area-context": "5.5.0"
}

Example: Write the below source code into the App.js file.

App.js
// App.js

import * as React from "react";
import ResumeForm from "./screens/ResumeForm";
import ShowCV from "./screens/ShowCV";

import { NavigationContainer } from "@react-navigation/native";
import { createNativeStackNavigator } from "@react-navigation/native-stack";

const Stack = createNativeStackNavigator();

export default function App() {
    return (
        <NavigationContainer>
            <Stack.Navigator>
                <Stack.Screen
                    name="GeekforGeeks Resume Builder"
                    component={ResumeForm}
                />

                <Stack.Screen name="Your CV" component={ShowCV} />
            </Stack.Navigator>
        </NavigationContainer>
    );
}
ResumeForm.js
//ResumeForm.js

import * as React from "react";
import {Text,View,StyleSheet,TextInput,
        Button,TouchableOpacity,ScrollView
} from "react-native";
import { useState } from "react";

export default function ResumeForm({ navigation }) {
    const [userDetails, setUserDetails] = useState({
        fullName: "",
        avatarUrl: "",
        profTitle: "",
        phoneNo: "",
        email: "",
        website: "",
        company: "",
        jobTitle: "",
        skill: "",
    });

    return (
        <ScrollView>
            <View style={styles.cont}>
                <View style={styles.header}>
                    <Text style={styles.headerText}>Resume Builder</Text>
                </View>

                <View style={styles.details}>
                    <Text style={styles.titleText}>Personal Details</Text>
                    <TextInput
                        style={styles.textinput}
                        placeholder="Enter your full name"
                        value={userDetails.fullName}
                        onChangeText={(e) => {
                            setUserDetails((userDetails) => ({
                                ...userDetails,
                                ...{ fullName: e },
                            }));
                        }}
                    />
                    <TextInput
                        style={styles.textinput}
                        placeholder="Enter your avatar URL"
                        value={userDetails.avatarUrl}
                        onChangeText={(e) => {
                            setUserDetails((userDetails) => ({
                                ...userDetails,
                                ...{ avatarUrl: e },
                            }));
                        }}
                    />
                    <TextInput
                        style={styles.textinput}
                        placeholder="Enter your professional title"
                        value={userDetails.profTitle}
                        onChangeText={(e) => {
                            setUserDetails((userDetails) => ({
                                ...userDetails,
                                ...{ profTitle: e },
                            }));
                        }}
                    />
                </View>

                <View style={styles.details}>
                    <Text style={styles.titleText}>Contact Details</Text>
                    <TextInput
                        style={styles.textinput}
                        placeholder="Enter your phone number"
                        value={userDetails.phoneNo}
                        onChangeText={(e) => {
                            setUserDetails((userDetails) => ({
                                ...userDetails,
                                ...{ phoneNo: e },
                            }));
                        }}
                    />
                    <TextInput
                        style={styles.textinput}
                        placeholder="Enter your email"
                        value={userDetails.email}
                        onChangeText={(e) => {
                            setUserDetails((userDetails) => ({
                                ...userDetails,
                                ...{ email: e },
                            }));
                        }}
                    />
                    <TextInput
                        style={styles.textinput}
                        placeholder="Enter your website link"
                        value={userDetails.website}
                        onChangeText={(e) => {
                            setUserDetails((userDetails) => ({
                                ...userDetails,
                                ...{ website: e },
                            }));
                        }}
                    />
                </View>

                <View style={styles.details}>
                    <Text style={styles.titleText}>Previous Job</Text>
                    <TextInput
                        style={styles.textinput}
                        placeholder="Enter company name"
                        value={userDetails.company}
                        onChangeText={(e) => {
                            setUserDetails((userDetails) => ({
                                ...userDetails,
                                ...{ company: e },
                            }));
                        }}
                    />
                    <TextInput
                        style={styles.textinput}
                        placeholder="Enter job title"
                        value={userDetails.jobTitle}
                        onChangeText={(e) => {
                            setUserDetails((userDetails) => ({
                                ...userDetails,
                                ...{ jobTitle: e },
                            }));
                        }}
                    />
                    <TextInput
                        style={styles.textinput}
                        placeholder="Enter your best skill"
                        value={userDetails.skill}
                        onChangeText={(e) => {
                            setUserDetails((userDetails) => ({
                                ...userDetails,
                                ...{ skill: e },
                            }));
                        }}
                    />
                </View>

                <Button
                    title="Create Resume"
                    style={styles.button}
                    onPress={() => navigation.navigate("ShowCV", userDetails)}
                ></Button>
            </View>
        </ScrollView>
    );
}

const styles = StyleSheet.create({
    cont: {
        flex: 1,
        backgroundColor: "white",
        paddingLeft: 40,
        paddingRight: 40,
        paddingTop: 30,
    },
    header: {
        marginBottom: 20,
        alignSelf: "stretch",
    },
    details: {
        marginBottom: 20,
    },
    headerText: {
        fontSize: 24,
        color: "#fff",
        borderBottomColor: "#199187",
        paddingBottom: 10,
        borderBottomWidth: 1,
    },
    titleText: {
        fontWeight: "bold",
        color: "blue",
        fontSize: 20,
        marginBottom: 10,
    },
    textinput: {
        alignSelf: "stretch",
        height: 40,
        color: "black",
        marginBottom: 20,
        borderBottomColor: "black",
        borderBottomWidth: 1,
    },
    button: {
        alignSelf: "stretch",
        alignItems: "center",
        padding: 10,
        backgroundColor: "#59cbbd",
        marginTop: 5,
        marginBottom: 20,
    },
});
ShowCV.js
//ShowCV.js

import * as React from "react";
import {Text,View,Image,StyleSheet,
        TextInput,Button,TouchableOpacity,
} from "react-native";
import { useState } from "react";
import { Card } from "react-native-paper";

export default function ShowCV({ navigation, route }) {
    let dataObj = route.params;
    return (
        <View style={styles.cont}>
            <View style={styles.header}>
                <Text style={styles.headerText}>Your Resume</Text>
            </View>

            <View style={styles.details}>
                <Text style={styles.titleText}>Personal Details</Text>
                <Image
                    source={{ uri: dataObj.avatarUrl }}
                    style={{ width: 80, height: 80 }}
                />
                <Text style={styles.text}>
                    <Text style={styles.key}>Name: </Text>
                    <Text>{dataObj.fullName}</Text>
                </Text>

                <Text style={styles.text}>
                    <Text style={styles.key}>Professional Title: </Text>
                    <Text>{dataObj.fullName}</Text>
                </Text>
            </View>

            <View style={styles.details}>
                <Text style={styles.titleText}>Contact Details</Text>
                <Text style={styles.text}>
                    <Text style={styles.key}>Phone Number: </Text>
                    <Text>{dataObj.phoneNo}</Text>
                </Text>

                <Text style={styles.text}>
                    <Text style={styles.key}>Email: </Text>
                    <Text>{dataObj.email}</Text>
                </Text>

                <Text style={styles.text}>
                    <Text style={styles.key}>Website Link: </Text>
                    <Text>{dataObj.website}</Text>
                </Text>
            </View>

            <View style={styles.details}>
                <Text style={styles.titleText}>Previous Job</Text>
                <Text style={styles.text}>
                    <Text style={styles.key}>Company: </Text>
                    <Text>{dataObj.company}</Text>
                </Text>

                <Text style={styles.text}>
                    <Text style={styles.key}>Role: </Text>
                    <Text>{dataObj.jobTitle}</Text>
                </Text>
                <Text style={styles.text}>
                    <Text style={styles.key}>Skill: </Text>
                    <Text>{dataObj.skill}</Text>
                </Text>
            </View>
        </View>
    );
}

const styles = StyleSheet.create({
    cont: {
        flex: 1,
        backgroundColor: "#36485f",
        paddingLeft: 40,
        paddingRight: 40,
        paddingTop: 40,
    },
    header: {
        marginBottom: 20,
        alignSelf: "stretch",
    },
    details: {
        marginBottom: 15,
    },
    headerText: {
        fontSize: 24,
        color: "#fff",
        borderBottomColor: "#199187",
        paddingBottom: 10,
        borderBottomWidth: 1,
    },
    titleText: {
        fontWeight: "bold",
        color: "blue",
        fontSize: 15,
        marginBottom: 10,
    },
    key: {
        fontWeight: "bold    },
                
    textcolor

Output:

Comment