Node.js, MUI, SerpApi మరియు React.jsని ఉపయోగించి ఒక ప్రత్యేకమైన జాబ్ బోర్డ్ వెబ్ అప్లికేషన్‌ను అభివృద్ధి చేయడం

Job Board

జాబ్ బోర్డ్ యాప్‌ను రూపొందించడానికి పరిచయం

మొదటి నుండి జాబ్ బోర్డ్ వెబ్ అప్లికేషన్‌ను రూపొందించే ఆకర్షణీయమైన ప్రాజెక్ట్ సమకాలీన ఫ్రంట్-ఎండ్ మరియు బ్యాక్-ఎండ్ టెక్నాలజీని మిళితం చేస్తుంది. మీరు వినియోగదారు ఇంటర్‌ఫేస్ కోసం React.jsతో సర్వర్ వైపు లాజిక్ కోసం Node.jsని కలపడం ద్వారా ప్రతిస్పందించే మరియు డైనమిక్‌గా ఉండే అప్లికేషన్‌ను తయారు చేయవచ్చు. SerpApi వంటి APIలను ఉపయోగించడం ద్వారా రియల్ టైమ్ జాబ్ పోస్టింగ్‌లను తీసుకురావడం ద్వారా మీరు వినియోగదారులకు ఇటీవలి అవకాశాలను అందించవచ్చు.

ఈ ప్రాజెక్ట్‌ను నిర్మించడానికి React.js అభివృద్ధి వాతావరణాన్ని త్వరగా సెటప్ చేయడానికి మేము Viteని ఉపయోగిస్తాము. Google జాబ్స్ నుండి జాబ్ పోస్టింగ్‌లను తిరిగి పొందడానికి SerpApi ఒక వంతెనగా పనిచేస్తుంది మరియు Node.js ఎక్స్‌ప్రెస్ ద్వారా సర్వర్ కార్యకలాపాలను నిర్వహిస్తుంది. మెటీరియల్-UI (MUI) నుండి విస్తారమైన లైబ్రరీకి యాక్సెస్‌ను కలిగి ఉంటాము, ఇది మా వినియోగదారు ఇంటర్‌ఫేస్‌ను స్టైల్ చేయడంలో మాకు సహాయం చేస్తుంది, ఇది పాలిష్‌గా మరియు స్పష్టమైనదిగా కనిపిస్తుంది.

బాహ్య APIలను ఎలా చేర్చాలనే దానితో పాటు పూర్తి-స్టాక్ వెబ్ అప్లికేషన్‌ను ఎలా నిర్వహించాలో ఈ పద్ధతి మీకు చూపుతుంది. ఫ్రంట్-ఎండ్ మరియు బ్యాక్-ఎండ్ ప్రోగ్రామింగ్‌లను కలపడం వలన స్కేలబుల్ వెబ్ అప్లికేషన్‌లను రూపొందించడానికి అవసరమైన ముఖ్యమైన ఆలోచనలను అర్థం చేసుకోవచ్చు. MUIతో పని చేయడం వలన మీ UI సామర్థ్యాలు కూడా మెరుగుపడతాయి, ఫలితంగా దృశ్యపరంగా అద్భుతమైన మరియు ఉపయోగకరమైన యాప్ లభిస్తుంది.

ఈ పాఠం ముగింపులో మీరు వర్కింగ్ జాబ్ బోర్డ్ వెబ్ అప్లికేషన్‌ని కలిగి ఉంటారు, అది జాబ్ జాబితాలను సులభంగా తిరిగి పొందగలదు, ప్రదర్శించగలదు మరియు స్టైల్ చేయగలదు. సమగ్ర అభివృద్ధి వాతావరణాన్ని సృష్టించడానికి ఈ సాధనాలన్నింటినీ ఎలా కలపాలో అన్వేషిద్దాం.

ఆదేశం ఉపయోగం యొక్క ఉదాహరణ
useEffect() ఫంక్షన్ భాగాలలో దుష్ప్రభావాలను అమలు చేసే రియాక్ట్ హుక్. కాంపోనెంట్ మొదట రెండర్ చేయబడినప్పుడు, ఇది API నుండి ఉద్యోగ జాబితాలను తిరిగి పొందడానికి ఈ సందర్భంలో ఉపయోగించబడుతుంది.
axios.get() ఉద్యోగ జాబితాలను తిరిగి పొందడానికి బ్యాకెండ్ లేదా బాహ్య API (SerpApi)కి GET అభ్యర్థనను సమర్పించడానికి, ఈ సందర్భంలో వాగ్దానం-ఆధారిత HTTP క్లయింట్‌ని నియమించారు.
setJobs() ఈ ఫంక్షన్ రియాక్ట్ కోసం యూస్‌స్టేట్ హుక్‌లో చేర్చబడింది. అప్‌డేట్ చేయబడిన డేటాతో కాంపోనెంట్ రీ-రెండర్ చేయడానికి, ఇది పొందిన జాబ్ లిస్టింగ్‌లతో రాష్ట్రాన్ని అప్‌డేట్ చేస్తుంది.
process.env.SERP_API_KEY ఎన్విరాన్మెంట్ వేరియబుల్ నుండి SerpApi కీని పొందుతుంది. ప్రైవేట్ సమాచారం హార్డ్‌కోడ్ కాకుండా సురక్షితంగా నిర్వహించబడుతుందని ఇది హామీ ఇస్తుంది.
res.json() Express.jsలోని ఈ పద్ధతి JSON ప్రతిస్పందనను అందిస్తుంది. జాబ్ పోస్టింగ్‌ల నుండి డేటా బ్యాకెండ్ నుండి ఫ్రంటెండ్‌కి దానిని ఉపయోగించి పంపబడుతుంది.
Container జాబ్ లిస్టింగ్ కార్డ్‌లను చుట్టుముట్టడం ద్వారా తగిన పేజీ అంతరం మరియు లేఅవుట్‌కు హామీ ఇచ్చే మెటీరియల్-UI (MUI) భాగం.
Typography టెక్స్ట్ రెండరింగ్‌కి ప్రీసెట్ స్టైల్‌లను వర్తింపజేసే మెటీరియల్-UI మూలకం. ఇక్కడ, ఉద్యోగ శీర్షికలు మరియు సంస్థ పేర్లు దీనిని ఉపయోగించి ప్రదర్శించబడతాయి.
screen.getByText() రియాక్ట్ టెస్టింగ్ లైబ్రరీ ఫంక్షన్ యూనిట్ పరీక్షలలో ప్రదర్శించబడే టెక్స్ట్ ఆధారంగా స్క్రీన్‌పై భాగాలను గుర్తించే ఫంక్షన్ ఉపయోగించబడుతుంది.

మా జాబ్ బోర్డ్ వెబ్ యాప్ ఎలా పనిచేస్తుంది

పైన పేర్కొన్న స్క్రిప్ట్‌లు పూర్తి-స్టాక్ జాబ్ బోర్డ్ కోసం వెబ్ అప్లికేషన్‌ను ఎలా అభివృద్ధి చేయాలో చూపుతాయి. React.js ఉపయోగించబడుతుంది ఉద్యోగ జాబితాలను తిరిగి పొందే మరియు వాటిని చక్కనైన, ప్రతిస్పందించే లేఅవుట్‌లో ప్రదర్శించే డైనమిక్ ఇంటర్‌ఫేస్‌ను రూపొందించడానికి. రియాక్ట్ యొక్క `జాబ్‌లిస్ట్` మరియు ఇతర భాగాల వినియోగం UI నిర్వహణ మరియు సంస్థను సులభతరం చేస్తుంది. `useEffect()` హుక్ కాంపోనెంట్ మౌంట్ అయినప్పుడు జాబ్ లిస్టింగ్‌లను పొందేందుకు అనుమతిస్తుంది. ఈ హుక్‌తో మేము మా APIని అసమకాలికంగా కాల్ చేయవచ్చు, ఇది డేటా లోడ్ అవుతున్నప్పుడు వినియోగదారు ఇంటర్‌ఫేస్‌ను ప్రతిస్పందించేలా చేస్తుంది. అదనంగా, మేము `కంటైనర్}, `కార్డ్} మరియు `టైపోగ్రఫీ} వంటి మెటీరియల్-UI కాంపోనెంట్‌లను ఉపయోగించి లేఅవుట్ మరియు స్టైలింగ్‌ను నిర్వహిస్తాము, దీని ఫలితంగా ఇంటర్‌ఫేస్ సౌందర్యంగా మరియు ఉపయోగకరంగా ఉంటుంది.

మేము ఎక్స్‌ప్రెస్‌ని ఉపయోగిస్తాము మరియు సాధారణ API సర్వర్‌ను రూపొందించడానికి బ్యాకెండ్‌లో. రియాక్ట్ ఫ్రంటెండ్ నుండి అభ్యర్థనలను నిర్వహించడం మరియు SerpApi వంటి బాహ్య APIలతో పరస్పర చర్య చేయడం బ్యాకెండ్ యొక్క ప్రధాన విధులు. మా ఎక్స్‌ప్రెస్ యాప్‌లోని `axios.get()` ఫంక్షన్ అభ్యర్థనలను పంపడం ద్వారా ఉద్యోగ సమాచారాన్ని పొందడానికి SerpApiని ఉపయోగిస్తుంది. `res.json()}ని ఉపయోగించి, ఫలితాలు JSON ఆకృతిలో రియాక్ట్ అప్లికేషన్‌కి తిరిగి పంపబడతాయి. ఎన్విరాన్మెంట్ వేరియబుల్స్‌ను సురక్షితంగా ఉంచడం బ్యాకెండ్‌లో ముఖ్యమైన భాగం. SerpApi కీని `process.env.SERP_API_KEY}లో నిల్వ చేయడం ద్వారా, కోడ్‌లో ప్రత్యక్షంగా బహిర్గతం కాకుండా రహస్య డేటా రక్షించబడుతుంది. యాప్ యొక్క ఫ్రంటెండ్ మరియు బ్యాకెండ్ విభజించబడ్డాయి, ప్రతి భాగం కోసం స్వయంప్రతిపత్త నిర్వహణ మరియు స్కేలబిలిటీని అనుమతిస్తుంది.

ఇంకా, స్క్రిప్ట్‌ల మాడ్యులర్ డిజైన్ ద్వారా భవిష్యత్ ఫీచర్ జోడింపులు సులభతరం చేయబడతాయి. ఉదాహరణకు, ఫ్రంటెండ్‌లో వినియోగదారుల కోసం ఫిల్టరింగ్ మరియు సార్టింగ్ ఎంపికలను జోడించడం లేదా నిర్దిష్ట రకాల ఉద్యోగాలను పొందేందుకు API మార్గాలను పొడిగించడం సులభం. అప్లికేషన్‌ను డీబగ్గింగ్ మరియు స్కేలింగ్‌ని సులభతరం చేసే పునర్వినియోగ భాగాలు మరియు మార్గాలుగా లాజిక్‌ను రూపొందించడం ద్వారా మేము బాధ్యతల యొక్క స్పష్టమైన విభజనను సంరక్షిస్తాము. అంతేకాకుండా, బాహ్య API కీలు ప్రాజెక్ట్‌లో హార్డ్‌కోడ్ చేయబడే బదులు పర్యావరణ వేరియబుల్స్‌లో సురక్షితంగా ఉంచబడిందని నిర్ధారించుకోవడం ద్వారా మరియు API సమాధానాలను ధృవీకరించడం ద్వారా భద్రతకు ప్రాధాన్యత ఇవ్వబడుతుంది.

ఈ అభివృద్ధి ప్రక్రియలో అంతర్భాగమైన అంశం పరీక్ష. జెస్ట్ మరియు రియాక్ట్ టెస్టింగ్ లైబ్రరీల సహాయంతో రూపొందించబడిన యూనిట్ టెస్ట్ స్క్రిప్ట్ ద్వారా ఫ్రంటెండ్ ఊహించిన ప్రవర్తన ధృవీకరించబడింది. ఉదాహరణకు, `screen.getByText()` అనేది పొందబడిన డేటాను బట్టి, ఉద్యోగ శీర్షికలు ఖచ్చితంగా అందించబడిందని నిర్ధారించడానికి ఉపయోగించబడుతుంది. ఈ యూనిట్ పరీక్షలు రాబోయే కోడ్ మార్పులకు వ్యతిరేకంగా అవరోధంగా పనిచేస్తాయి, ఇవి ప్రోగ్రామ్ ఉద్దేశించిన విధంగా పనిచేస్తోందని ధృవీకరించడంతో పాటు ఇప్పటికే ఉన్న కార్యాచరణకు అంతరాయం కలిగించవచ్చు. మేము బ్యాకెండ్ API మార్గాలను అలాగే రియాక్ట్ భాగాలను పరీక్షించడం ద్వారా మరింత ఆధారపడదగిన మరియు మన్నికైన జాబ్ బోర్డ్ అప్లికేషన్‌ను రూపొందిస్తాము.

React.js మరియు Viteతో ఫ్రంటెండ్‌ని సెటప్ చేస్తోంది

శీఘ్ర అభివృద్ధి కోసం ఫ్రంటెండ్‌ని సెటప్ చేయడానికి Vite మరియు React.jsని ఎలా ఉపయోగించాలో ఈ స్క్రిప్ట్ ప్రదర్శిస్తుంది. అప్లికేషన్ స్టైలింగ్ కోసం మెటీరియల్-UIని కలిగి ఉంటుంది, కాంపోనెంట్ పునర్వినియోగాన్ని గరిష్టం చేస్తుంది మరియు SerpApi నుండి ఉద్యోగ జాబితాలను తిరిగి పొందుతుంది.

import React, { useState, useEffect } from 'react';
import axios from 'axios';
import { Container, Card, CardContent, Typography } from '@mui/material';

// Job listing component
const JobList = () => {
  const [jobs, setJobs] = useState([]);
  useEffect(() => {
    fetchJobs();
  }, []);

  const fetchJobs = async () => {
    try {
      const response = await axios.get('/api/jobs');
      setJobs(response.data.jobs);
    } catch (error) {
      console.error('Error fetching jobs:', error);
    }
  };

  return (
    <Container>
      {jobs.map((job) => (
        <Card key={job.id}>
          <CardContent>
            <Typography variant="h5">{job.title}</Typography>
            <Typography>{job.company}</Typography>
          </CardContent>
        </Card>
      ))}
    </Container>
  );
};

export default JobList;

Node.js మరియు Expressతో బ్యాకెండ్‌ను రూపొందించడం

ఈ స్క్రిప్ట్ బ్యాకెండ్‌ను రూపుమాపడానికి Express మరియు Node.jsని ఉపయోగిస్తుంది. ఇది SerpApi నుండి జాబ్ లిస్టింగ్ API కాల్‌లను నిర్వహిస్తుంది, సమర్థత ఆప్టిమైజేషన్ మరియు మాడ్యులారిటీని నొక్కి చెబుతుంది.

const express = require('express');
const axios = require('axios');
const app = express();
const port = process.env.PORT || 5000;

// SerpApi key stored in environment variable for security
const serpApiKey = process.env.SERP_API_KEY;

app.get('/api/jobs', async (req, res) => {
  try {
    const response = await axios.get(
      `https://serpapi.com/search.json?q=software+developer&api_key=${serpApiKey}`
    );
    res.json({ jobs: response.data.jobs });
  } catch (error) {
    console.error('Error fetching jobs:', error);
    res.status(500).send('Server error');
  }
});

app.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

జాబ్ బోర్డ్ అప్లికేషన్‌ని పరీక్షిస్తున్న యూనిట్

ఫ్రంటెండ్ మరియు బ్యాకెండ్ కోసం యూనిట్ పరీక్షలను రూపొందించడానికి జెస్ట్ ఎలా ఉపయోగించాలో ఈ స్క్రిప్ట్ చూపిస్తుంది. జాబ్ బోర్డు ఉద్దేశించిన విధంగా పనిచేస్తుందని ఇది హామీ ఇస్తుంది.

// Unit test for React component using Jest and React Testing Library
import { render, screen } from '@testing-library/react';
import JobList from './JobList';

test('renders job listings', () => {
  const jobs = [{ id: 1, title: 'Frontend Developer', company: 'TechCorp' }];
  render(<JobList jobs={jobs} />);
  const jobTitle = screen.getByText(/Frontend Developer/i);
  expect(jobTitle).toBeInTheDocument();
});

జాబ్ బోర్డ్ అప్లికేషన్‌లలో API ఇంటిగ్రేషన్ పాత్రను అన్వేషించడం

బయటి మూలాల నుండి ప్రస్తుత జాబ్ పోస్టింగ్‌లను తిరిగి పొందడానికి, సమకాలీన జాబ్ బోర్డ్ అప్లికేషన్‌ను అభివృద్ధి చేయడానికి SerpApi వంటి థర్డ్-పార్టీ APIలను సమగ్రపరచడం చాలా అవసరం. డెవలపర్‌లు వంటి సేవలను ఉపయోగించుకోవచ్చు జాబ్ పోస్ట్‌లను మాన్యువల్‌గా క్యూరేట్ చేసే స్థానంలో అప్‌డేట్ చేయబడిన జాబితాలను సేకరించడానికి, వినియోగదారులకు ఎల్లప్పుడూ సరికొత్త అవకాశాలకు యాక్సెస్ ఉంటుందని హామీ ఇస్తుంది. సమయాన్ని ఆదా చేయడంతో పాటు, ఈ ఆటోమేషన్ యాక్సెస్ చేయగల ఉద్యోగ ప్రకటనల సంఖ్యను పెంచుతుంది, ఇది వినియోగదారులకు మరింత సమగ్రమైన ఉద్యోగ శోధన అనుభవాన్ని అందిస్తుంది.

మీరు మీలో స్కేలబిలిటీ మరియు వశ్యతను సాధించవచ్చు SerpApi వంటి APIలను సమగ్రపరచడం ద్వారా బ్యాకెండ్. ఉద్యోగ శీర్షిక లేదా స్థానం వంటి నిర్దిష్ట అవసరాలకు అనుగుణంగా ఉద్యోగాలను తిరిగి పొందేందుకు API కాల్‌లను రూపొందించవచ్చు. ఈ పారామితులను శోధన ప్రశ్నలుగా ఫ్రంటెండ్ ద్వారా డైనమిక్‌గా పాస్ చేయడం ద్వారా జాబ్ బోర్డ్‌ను మరింత ఇంటరాక్టివ్ మరియు యూజర్ ఫ్రెండ్లీగా మార్చవచ్చు. Node.jsలో అసమకాలిక కాల్‌లను ఉపయోగించడం ద్వారా, API ఫలితాలు ప్రాసెస్ చేయబడతాయి మరియు ప్రదర్శన కోసం రియాక్ట్ ఫ్రంటెండ్‌కు తిరిగి ఇవ్వబడతాయి-అన్నీ త్వరిత ప్రతిస్పందన సమయాలను నిర్ధారిస్తాయి.

అదనంగా, API కనెక్షన్ జాబ్ బుక్‌మార్కింగ్, వినియోగదారు ప్రామాణీకరణ మరియు ఉద్యోగ పోస్టింగ్ కోసం యజమాని డ్యాష్‌బోర్డ్‌ల వంటి అదనపు ఫీచర్‌ల కోసం అవకాశాలను సృష్టిస్తుంది. వినియోగదారు పరస్పర చర్య మరియు డేటా పునరుద్ధరణను సమర్ధవంతంగా నిర్వహించడానికి అప్లికేషన్ రూపొందించబడినప్పుడు ప్రాజెక్ట్‌ను పెంచడం సులభం. WebSocketsతో, డెవలపర్లు తక్షణ జాబ్ పోస్టింగ్ నోటిఫికేషన్‌లు మరియు నిజ-సమయ నవీకరణల వంటి అధునాతన కార్యాచరణలను పొందుపరచవచ్చు. నేటి వేగవంతమైన మార్కెట్‌లో, పోటీ ఉద్యోగ బోర్డు ప్లాట్‌ఫారమ్‌లకు ఈ రకమైన చైతన్యం అవసరం.

  1. ఎలా చేస్తుంది ఉద్యోగ జాబితాలను పొందడంలో హుక్ సహాయం చేయాలా?
  2. భాగం మొదట మౌంట్ చేయబడినప్పుడు, ది హుక్ జాబ్ ఫెచ్ ప్రాసెస్‌ను ప్రారంభిస్తుంది, ఇది పేజీ రెండర్ అయినప్పుడు డేటా లోడ్ అయ్యేలా చేస్తుంది.
  3. ఎలాంటి పాత్ర చేస్తుంది బ్యాకెండ్ API కాల్స్‌లో ప్లే చేయాలా?
  4. వాగ్దానం-ఆధారిత HTTP క్లయింట్ కాల్ చేయబడింది బ్యాకెండ్ నుండి SerpApiని ప్రశ్నిస్తుంది మరియు JSON డేటా వలె ఉద్యోగ జాబితాలను అందిస్తుంది.
  5. రియాక్ట్ యాప్‌లో నేను API లోపాలను ఎలా నిర్వహించగలను?
  6. డేటాను పొందే ప్రక్రియలో లోపం సంభవించినట్లయితే, మీరు మీ API కాల్‌ని వ్రాప్ చేయడం ద్వారా దాన్ని పట్టుకోవచ్చు మరియు నిర్వహించవచ్చు నిరోధించు.
  7. ఈ ప్రాజెక్ట్‌లో మెటీరియల్-UIని ఉపయోగించడం వల్ల ప్రయోజనం ఏమిటి?
  8. వంటి ముందే నిర్మించిన భాగాలు మరియు మెటీరియల్-UI ద్వారా అందించబడతాయి, ఇది మెరుగుపెట్టిన ప్రదర్శనతో ఫ్రంటెండ్‌ను స్టైల్ చేయడం సులభం చేస్తుంది.
  9. నిర్దిష్ట ఉద్యోగం కోసం చూసేందుకు API కాల్‌ను రూపొందించడం సాధ్యమేనా?
  10. అవును, మీరు ఉపయోగించవచ్చు SerpApi అభ్యర్థనకు శోధన పారామితులను (ఉద్యోగ శీర్షిక లేదా స్థానం) డైనమిక్‌గా పాస్ చేయడానికి API కాల్‌లో.

జాబ్ బోర్డ్ అప్లికేషన్‌ను రూపొందించడానికి React.js మరియు Node.jsతో కలిపి SerpApi వంటి APIలను ఉపయోగించడం ఉద్యోగ శోధనల కోసం డైనమిక్ ప్లాట్‌ఫారమ్‌ను అభివృద్ధి చేయడానికి ఒక అద్భుతమైన పద్ధతి. ఈ ప్రాజెక్ట్ సమకాలీన వెబ్ అభివృద్ధి వ్యూహాలను ప్రదర్శించడానికి వివిధ రకాల సాధనాలను సమర్థవంతంగా అనుసంధానిస్తుంది.

ఎక్స్‌ప్రెస్‌ని ఉపయోగించి బలమైన బ్యాకెండ్ మరియు మెటీరియల్-UIతో ప్రతిస్పందించే ఇంటర్‌ఫేస్ కలయిక కారణంగా ప్రాజెక్ట్ స్కేలబుల్ మరియు సులభంగా నిర్వహించబడుతుంది. ఈ ఫ్రేమ్‌వర్క్ భవిష్యత్ స్కేలబిలిటీని దృష్టిలో ఉంచుకుని వినియోగదారు నిర్వహణ మరియు నిజ-సమయ నవీకరణల వంటి లక్షణాలను మెరుగుపరచడానికి అవకాశాలను సృష్టిస్తుంది.

  1. ఈ కథనం యొక్క సాంకేతిక వివరాలు మరియు ఉత్తమ అభ్యాసాలు అధికారిక React.js డాక్యుమెంటేషన్‌తో సహా బహుళ React.js మరియు Node.js డాక్యుమెంటేషన్ మూలాధారాల నుండి తీసుకోబడ్డాయి: React.js డాక్యుమెంటేషన్ .
  2. Express.js అధికారిక డాక్యుమెంటేషన్ నుండి తీసుకోబడిన సూచనలతో బ్యాకెండ్ డెవలప్‌మెంట్ కోసం ఉపయోగించబడింది: Express.js డాక్యుమెంటేషన్ .
  3. ఉద్యోగ జాబితాలను పొందడం కోసం SerpApi ఇంటిగ్రేషన్ SerpApi డెవలపర్ డాక్యుమెంటేషన్ ద్వారా మార్గనిర్దేశం చేయబడింది: SerpApi డాక్యుమెంటేషన్ .
  4. మెటీరియల్-UI కాంపోనెంట్‌ల కోసం, డిజైన్ మార్గదర్శకత్వం అధికారిక మెటీరియల్-UI కాంపోనెంట్ లైబ్రరీ నుండి తీసుకోబడింది: మెటీరియల్-UI డాక్యుమెంటేషన్ .
  5. React.js కోసం Vite సెటప్ అధికారిక Vite డాక్యుమెంటేషన్ ఆధారంగా చేయబడింది: వైట్ డాక్యుమెంటేషన్ .