57 | {/**
58 | * @component Header
59 | * {@link https://github.com/modern-agile-team/dev-portfolio#header}
60 | */}
61 |
101 |
102 | {/**
103 | * Just introduction for dev-portfolio-app.
104 | *
105 | * If you want to view internal of Introduction,
106 | * go to the './src/common/instruction/Introduction.tsx'
107 | */}
108 |
109 |
110 | {/**
111 | * @component Intro
112 | * {@link https://github.com/modern-agile-team/dev-portfolio#intro}
113 | */}
114 |
120 |
121 | {/**
122 | * Just introduction for TechStackInput component.
123 | *
124 | * If you want to view internal of TeckstackInputInstruction,
125 | * go to the './src/common/instruction/TeckstackInputInstruction.tsx'
126 | */}
127 |
128 |
129 | {/**
130 | * TechStackInput used only to find the logoName value in the TechStackList.
131 | *
132 | * @component TechStackInput
133 | * {@link none}
134 | */}
135 |
136 |
137 | {/**
138 | * @component TechStackList
139 | * {@link https://github.com/modern-agile-team/dev-portfolio#techstacklist}
140 | */}
141 |
142 | Tech Stack List
143 |
144 |
196 |
197 | {/**
198 | * @component ProgressBar
199 | * {@link https://github.com/modern-agile-team/dev-portfolio#progressbar}
200 | *
201 | * If you want to view ProgressBar component,
202 | * go to the './src/common/instruction/ProgressBarInstruction.tsx'
203 | */}
204 |
205 |
206 | {/**
207 | * @component Skill
208 | * {@link https://github.com/modern-agile-team/dev-portfolio#skill}
209 | *
210 | * If you want to view Skill component,
211 | * go to the './src/common/instruction/SkillInstruction.tsx'
212 | */}
213 |
214 |
215 | {/**
216 | * Just introduction for Carousel, Gallery and Masonry.
217 | *
218 | * If you want to view internal of DisplayPortfolioInstruction,
219 | * go to the './src/common/instruction/DisplayPortfolioInstruction.tsx'
220 | */}
221 |
222 |
223 | {/**
224 | * @component Carousel
225 | * {@link https://github.com/modern-agile-team/dev-portfolio#carousel}
226 | */}
227 |
228 |
229 |
230 |
231 |
232 |
233 |
234 |
235 | {/**
236 | * @component Gallery
237 | * {@link https://github.com/modern-agile-team/dev-portfolio#gallery}
238 | */}
239 |
240 | {[1, 2, 3, 4, 5, 6, 7, 8, 9].map((idx) => (
241 |
246 | ))}
247 |
248 |
249 | {/**
250 | * @component Masonry
251 | * {@link https://github.com/modern-agile-team/dev-portfolio#masonry}
252 | */}
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 | {/**
270 | * @component VisitorCounter
271 | * {@link https://github.com/modern-agile-team/dev-portfolio#visitorcounter}
272 | *
273 | * If you want to view Card component,
274 | * go to the './src/common/instruction/VisitorCounterInstruction.tsx'
275 | */}
276 |
277 |
278 | {/**
279 | * @component VisitorComment
280 | * {@link https://github.com/modern-agile-team/dev-portfolio#visitorcomment}
281 | */}
282 |
285 |
300 |
301 | {/**
302 | * @component Card
303 | * {@link https://github.com/modern-agile-team/dev-portfolio#card}
304 | *
305 | * If you want to view Card component,
306 | * go to the './src/common/instruction/CardInstruction.tsx'
307 | */}
308 |
309 |
310 | {/**
311 | * @component Experience
312 | * {@link https://github.com/modern-agile-team/dev-portfolio#experience}
313 | */}
314 |
315 |
316 | {/**
317 | * @component Channel
318 | * {@link https://github.com/modern-agile-team/dev-portfolio#channel}
319 | *
320 | * @component Channels
321 | * {@link https://github.com/modern-agile-team/dev-portfolio#channels}
322 | *
323 | * If you want to view Channel and Channels component,
324 | * go to the './src/common/instruction/ChannelInstruction.tsx'
325 | */}
326 |
327 |
328 | {/**
329 | * Just introduction for Contact.
330 | *
331 | * If you want to view internal of ContactInstruction,
332 | * go to the './src/common/instruction/ContactInstruction.tsx'
333 | */}
334 |
335 |
336 | {/**
337 | * @component Contact
338 | * {@link https://github.com/modern-agile-team/dev-portfolio#contact}
339 | */}
340 |
378 |
379 | );
380 | }
381 |
382 | export default App;
383 |
384 | /**
385 | * Just styled component for TechStackList's title
386 | *
387 | * If you don't need this, delete both TechStackListTitle component and the style components below.
388 | */
389 | const TechStackListTitle = styled.h1`
390 | color: ${color.mainColor};
391 | margin: 1em 1em;
392 | padding-bottom: 15px;
393 | border-bottom: 1px solid;
394 | `;
395 |
396 | /**
397 | * Just styled component for VisitorComment's title
398 | *
399 | * If you don't need this, delete both VisitorCommentTitle component and the style components below.
400 | */
401 | const VisitorCommentTitle = styled.h1`
402 | margin: 1em 1em 0 1em;
403 | padding-bottom: 15px;
404 | `;
405 |
406 | /**
407 | * Just styled component for Carousel's title
408 | *
409 | * If you don't need this, delete both CarouselWrap component and the style components below.
410 | */
411 | const CarouselWrap = styled.div`
412 | background-color: ${color.mainColor};
413 | padding: 2em 0;
414 | svg {
415 | color: white;
416 | }
417 | `;
418 |
--------------------------------------------------------------------------------
/client/app/src/apis/comment.ts:
--------------------------------------------------------------------------------
1 | import instance from "./instance";
2 |
3 | class CommentHTTP {
4 | private instance = instance;
5 |
6 | async getCommment() {
7 | return await this.instance.get("/apis/visitor/comments");
8 | }
9 |
10 | async createComment(body: any) {
11 | return await this.instance.post("/apis/visitor/comment", body);
12 | }
13 | }
14 |
15 | const commentAPI = new CommentHTTP();
16 |
17 | export default commentAPI;
18 |
--------------------------------------------------------------------------------
/client/app/src/apis/count.ts:
--------------------------------------------------------------------------------
1 | import instance from "./instance";
2 |
3 | class CountHTTP {
4 | private instance = instance;
5 |
6 | async getCount() {
7 | return await this.instance.patch("/apis/visitor/count");
8 | }
9 | }
10 |
11 | const countAPI = new CountHTTP();
12 |
13 | export default countAPI;
14 |
--------------------------------------------------------------------------------
/client/app/src/apis/instance.ts:
--------------------------------------------------------------------------------
1 | const {
2 | REACT_APP_NODE_ENV, //
3 | REACT_APP_SERVER_HOST_ADDRESS, //
4 | REACT_APP_SERVER_PORT, //
5 | } = process.env;
6 |
7 | export class HTTP {
8 | private domain: string = "";
9 |
10 | constructor(domain: string) {
11 | this.domain = domain;
12 | }
13 |
14 | async get(api: string) {
15 | return await fetch(`${this.domain}${api}`).then((res) => res.json());
16 | }
17 |
18 | async post(api: string, data: any) {
19 | return await fetch(`${this.domain}${api}`, {
20 | method: "POST",
21 | headers: {
22 | "Content-Type": "application/json",
23 | },
24 | body: JSON.stringify(data),
25 | }).then((res) => res.json());
26 | }
27 |
28 | async put(api: string, data: any) {
29 | return await fetch(`${this.domain}${api}`, {
30 | method: "PUT",
31 | ...data,
32 | }).then((res) => res.json());
33 | }
34 |
35 | async delete(api: string, data: any) {
36 | return await fetch(`${this.domain}${api}`, {
37 | method: "DELETE",
38 | ...data,
39 | }).then((res) => res.json());
40 | }
41 |
42 | async patch(api: string) {
43 | return await fetch(`${this.domain}${api}`, {
44 | method: "PATCH",
45 | }).then((res) => res.json());
46 | }
47 | }
48 |
49 | const instance = new HTTP(
50 | `http://${
51 | REACT_APP_NODE_ENV === "production"
52 | ? REACT_APP_SERVER_HOST_ADDRESS
53 | : "localhost"
54 | }:${REACT_APP_SERVER_PORT}`
55 | );
56 |
57 | export default instance;
58 |
--------------------------------------------------------------------------------
/client/app/src/common/index.ts:
--------------------------------------------------------------------------------
1 | export { default as Introduction } from "./instruction/Introduction";
2 | export { default as CardInstruction } from "./instruction/CardInstruction";
3 | export { default as DisplayPortfolioInstruction } from "./instruction/DisplayPortfolioInstruction";
4 | export { default as VisitorCounterInstruction } from "./instruction/VisitorCounterInstruction";
5 | export { default as TeckstackInputInstruction } from "./instruction/TeckstackInputInstruction";
6 | export { default as SkillInstruction } from "./instruction/SkillInstruction";
7 | export { default as ChannelInstruction } from "./instruction/ChannelInstruction";
8 | export { default as ProgressBarInstruction } from "./instruction/ProgressBarInstruction";
9 | export { default as ContactInstruction } from "./instruction/ContactInstruction";
10 |
--------------------------------------------------------------------------------
/client/app/src/common/instruction/CardInstruction.tsx:
--------------------------------------------------------------------------------
1 | import { Card } from "dev-portfolio";
2 | import styled from "styled-components";
3 |
4 | const CardInstruction = ({ id }: { id: string }) => {
5 | return (
6 |