Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/app/components/admin-navbar/admin-navbar.component.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<nav class="navbar navbar-expand-lg navbar-light bg-white border-bottom border-3">
<div class="container">
<a class="navbar-brand" routerLink="/admin/">Admin panel</a>
<a class="navbar-brand" routerLink="/admin/">Админка</a>
<button
class="navbar-toggler"
type="button"
Expand Down Expand Up @@ -35,7 +35,7 @@

<form class="d-flex" *ngIf="showSearchForm">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search" />
<button class="btn btn-outline-success disabled" disabled type="submit">Search</button>
<button class="btn btn-outline-success disabled" disabled type="submit">Поиск</button>
</form>
</div>
</div>
Expand Down
4 changes: 2 additions & 2 deletions src/app/components/maintenance/maintenance.component.html
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<div class="container">
<div class="mt-3 d-flex flex-column">
<div class="display-1 fw-bold text-center">Maintenance</div>
<div class="display-1 fw-bold text-center">Обновляем сайт</div>

<div class="display-3 text-center mt-3">
Don't panic, we do maintenace stuff. Service will be available soon
Без паники! Мы добавляем новые фичи и фиксим баги. Скоро вернемся!
</div>
<div class="display-2 text-center mt-3">¯\_(ツ)_/¯</div>
</div>
Expand Down
10 changes: 5 additions & 5 deletions src/app/components/navbar/navbar.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
aria-current="page"
(click)="login()"
[attr.disabled]="!loginButtonAvailable"
>Sign in</a
>Войти</a
>
</li>
<ng-template #loggedIn>
Expand All @@ -57,11 +57,11 @@
{{ loginName }}
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" routerLink="/me">Profile</a></li>
<li><a class="dropdown-item" routerLink="users/me/labels">My lables</a></li>
<li><a class="dropdown-item" routerLink="/me">Мой профиль</a></li>
<li><a class="dropdown-item" routerLink="users/me/labels">Мои метки</a></li>
<li><hr class="dropdown-divider" /></li>
<li><a class="dropdown-item" routerLink="/admin" *appHasRole="'admin'">Admin panel</a></li>
<li><a class="dropdown-item cursor-pointer" (click)="logout()">Sign out</a></li>
<li><a class="dropdown-item" routerLink="/admin" *appHasRole="'admin'">Админка</a></li>
<li class="cursor-pointer"><a class="dropdown-item" (click)="logout()">Выйти</a></li>
</ul>
</li>
</ng-template>
Expand Down
18 changes: 9 additions & 9 deletions src/app/components/navbar/navbar.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,48 +90,48 @@ export class NavbarComponent implements OnInit, OnDestroy {

this.dropdowns = [
{
title: 'Interviews',
title: 'Заметки',
show: hasCurrentUser && this.currentUser!.hasRole(UserRole.Interviewer),
links: [
{
title: 'Start an interview',
title: 'Начать интервью',
url: '/interviews/create',
show: true
},
{
title: 'My interviews',
title: 'Мои интервью',
url: '/interviews/my',
show: true
}
]
},
{
title: 'Templates',
title: 'Шаблоны',
show: true,
links: [
{
title: 'Create a template',
title: 'Создать шаблон',
url: '/interviews/templates/create',
show: hasCurrentUser && this.currentUser!.hasRole(UserRole.Interviewer)
},
{
title: 'My templates',
title: 'Мои шаблоны',
url: '/interviews/templates/my',
show: hasCurrentUser && this.currentUser!.hasRole(UserRole.Interviewer)
},
{
title: 'Public templates',
title: 'Публичные шаблоны',
url: '/interviews/templates/public',
show: true
}
]
},
{
title: 'Salaries',
title: 'Зарплаты',
show: true,
links: [
{
title: 'Salaries chart',
title: 'Статистика по зарплатам',
url: '/salaries',
show: true
},
Expand Down
14 changes: 13 additions & 1 deletion src/app/modules/home/components/about-us/about-us.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,26 @@
</div>

<div class="mb-3 mt-5">
<div class="mb-1 h5">в СМИ о нас</div>
<div class="mb-1 h5">СМИ о нас</div>
<div>
<a class="text-reset" href="https://digitalbusiness.kz/2024-03-12/almatinets-sozdal-servis-dlya-sbora-dannih-o-zarplatah-kazahstanskih-aytishnikov/" target="_blank">
Алматинец создал сервис для сбора информации о зарплатах казахстанских айтишников
</a>, Digital Business, 13 марта 2024
</div>
</div>

<div class="mb-3 mt-5">
<div class="mb-1 h5">История проекта</div>
<div class="mt-2">Меня зовут Максим, изначально я создавал платформу для ведения заметок во время технических интервью.</div>
<div class="mt-2">
В 2021-2022 годах я активно проводил собеседования на основной работе, а также был внешним интервьюером в другой компании.
Минимум раз в неделю общался с кандидатами и по каждому собеседованию нужно было оформлять фидбек по шаблонам и отдавать рекрутеру.
Мне ахотелось автоматизировать процесс, и так и родился сервис Tech.Interview. Я разработал его в первую очередь для себя, но в профессиональных чатах поделился ссылкой и предложил использовать всем желающим.
К сожалению, особой популярности у платформы не было. Через какое-то время я и сам перестал активно проводить собеседования, но оставил портал и продолжил платить за домен.
</div>
<div class="mt-2">В 2024 году решил создать сервис по сбору статистики по зарплатам, и самым простым решением было разработать его на базе уже существующей платформы.</div>
</div>

<hr class="mt-5" />
<div class="mt-3">
<span><i class="bi bi-geo"></i></span>
Expand Down
77 changes: 36 additions & 41 deletions src/app/modules/home/components/home/home.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<div class="col-sm d-flex align-items-end">
<div class="d-inline-block my-5">
<div class="display-1">Tech.Interview</div>
<div class="lead">Conduct an interview. Make your notes. Create templates.</div>
<div class="lead">Зарплаты в IT и заметки к техническим интервью</div>
</div>
</div>
<div class="col-sm">
Expand All @@ -13,54 +13,49 @@
</div>

<div class="mt-5">
<div *ngFor="let hint of images" class="feature {{ hint.background }}">

<div class="feature bg-white">
<div class="container">
<div class="row">
<div class="col-sm-4">
<div class="feature-title">{{ hint.title }}</div>
<div class="mt-3 feature-subtitle">{{ hint.subtitle }}</div>
</div>
<div class="col-sm-8">
<div *ngIf="hint.showPreloader" class="h-100 d-flex justify-content-center align-items-center">
<div class="spinner-border" style="width: 3rem; height: 3rem" role="status">
<span class="visually-hidden">Loading...</span>
</div>
</div>
<img
[hidden]="hint.showPreloader"
class="feature-image"
src="{{ hint.imageSrc }}"
alt="{{ hint.imageAlt }}"
(load)="showImage(hint)"
(error)="showImage(hint)"
/>
</div>
<div class="feature-title">Зарплаты в IT в Казахстане</div>
<div class="mt-3 feature-subtitle">
Здесь мы собираем и анализируем данные по зарплатам в IT в РК.
</div>
<div class="mt-1 feature-subtitle">
В 2024 году мы решили, что в Казахстане не хватает актуальной и публичной статистики по зарплатам в IT сфере. Мы решили это исправить.
</div>
<div class="feature-subtitle">
Хочешь узнать, сколько попросить в следующий раз на собеседовании - посмотри в собранной статистике.
</div>
<div class="mt-5">
<a routerLink="/salaries" class="btn btn-huge btn-primary">Перейти к зарплатам</a>
</div>
</div>
</div>
</div>

<div class="feature bg-white">
<div class="container">
<div class="feature-title">Application is free for everybody and opensource<br />Forever</div>
<div class="mt-3 feature-subtitle">
We believe that this app should be free for everyone.
We are <a href="https://github.com/orgs/Techinterview-space/repositories" class="text-reset" target="_blank"><i class="bi bi-github"></i> open source</a> and we are looking for contributors.
</div>
<div class="mt-3 feature-subtitle">
If you want to help us, here is our <a href="https://boosty.to/ake111aa" class="text-reset" target="_blank"><i class="bi bi-cash-coin"></i> boosty</a>. Any help is appreciated.
</div>
<div class="mt-5">
<hr class="mx-auto w-50" />
<div class="feature">
<div class="container">
<div class="feature-title">Заметки к техническим интервью</div>
<div class="mt-3 feature-subtitle">
Если ты проводишь технические собеседования и хочешь создать шаблон и сохранять фидбеки, чтобы потом делиться ими с коллегами - тебе сюда.
</div>
<div class="mt-5">
<a routerLink="/interviews" class="btn btn-huge btn-outline-primary">Перейти к заметкам</a>
</div>
</div>
</div>
</div>

<div class="feature bg-white">
<div class="container">
<div class="feature-title">Ready to start? Just create your first interview or template</div>
<div class="mt-5">
<button type="button" class="btn btn-huge btn-primary" (click)="getStarted()">{{ getStartedButtonTitle }}</button>
<div class="feature bg-white">
<div class="container">
<div class="feature-title">Наш проект - некоммерческий и в свободном доступе.</div>
<div class="mt-1 feature-title">Так будет всегда.</div>
<div class="mt-3 feature-subtitle">
Мы верим, что этот проект должен быть бесплатным для всех.
<br />
Мы открыли исходный код на <a href="https://github.com/orgs/Techinterview-space/repositories" class="text-reset" target="_blank"><i class="bi bi-github"></i> GitHub</a> и будем рады новым контрибьютерам.
</div>
<div class="mt-3 feature-subtitle">
Если вы хотите поддержать нас, то тут наш <a href="https://boosty.to/ake111aa" class="text-reset" target="_blank"><i class="bi bi-cash-coin"></i> бусти</a>. Мы благодарны любой помощи.
</div>
</div>
</div>
</div>
110 changes: 5 additions & 105 deletions src/app/modules/home/components/home/home.component.ts
Original file line number Diff line number Diff line change
@@ -1,116 +1,16 @@
import { Component, OnDestroy, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { ApplicationUserExtended } from '@models/extended';
import { Component } from '@angular/core';
import { TitleService } from '@services/title.service';
import { AuthService } from '@shared/services/auth/auth.service';
import { SpinnerService } from '@shared/services/spinners/spinner-service';
import { untilDestroyed } from '@shared/subscriptions/until-destroyed';

interface ImageHint {
background: string;
title: string;
subtitle: string;
imageSrc: string;
imageAlt: string;
showPreloader: boolean;
}

@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.scss']
})
export class HomeComponent implements OnInit, OnDestroy {
showHomePage = false;
getStartedButtonTitle = 'Get started';
get showLoginButton(): boolean {
return this.currentUser == null;
}

images: Array<ImageHint> = [];

private currentUser: ApplicationUserExtended | null = null;
export class HomeComponent {

constructor(
private readonly titleService: TitleService,
private readonly authService: AuthService,
private readonly spinner: SpinnerService,
private readonly router: Router
) {}

ngOnInit(): void {
this.titleService.resetTitle();
this.authService
.getCurrentUser()
.pipe(untilDestroyed(this))
.subscribe((currentUser) => {
this.currentUser = currentUser;
if (currentUser != null) {
this.getStartedButtonTitle = 'My interviews';
}
});

this.images = [
{
background: 'bg-white',
title: 'Make your private notes during the interview',
subtitle:
'Your notes will be safe and secure. No one except you will be able to see them unless you share them withothers.',
imageSrc:
'https://object.pscloud.io/petrel-intranet-storage/public-files/5738785c-4522-4842-861e-c2b59903b228-conduct_interview_main_page.gif',
imageAlt: 'Conduct the interview GIF',
showPreloader: true
},
{
background: '',
title: 'Share your feedback',
subtitle: 'Feel free to share your feedback as markdown document. Exporting as PDF is available.',
imageSrc:
'https://object.pscloud.io/petrel-intranet-storage/public-files/dfd35b14-26e8-4eab-bb3f-6ab4e69febfa-share_the_interview.gif',
imageAlt: 'Share the interview GIF',
showPreloader: true
},
{
background: 'bg-white',
title: 'Create interview templates',
subtitle:
'You may create interview template for future interviews. You can use the template to conduct the interview. Also, if you mark any template as public, everybody will be able to use it.',
imageSrc:
'https://object.pscloud.io/petrel-intranet-storage/public-files/05dfc8cc-565f-4500-b4df-490175252e74-create_templates_main_page.gif',
imageAlt: 'Create interview templates GIF',
showPreloader: true
},
{
background: '',
title: 'Use templates for your interviews',
subtitle: 'You can use templates created by you and other public ones.',
imageSrc:
'https://object.pscloud.io/petrel-intranet-storage/public-files/2aff4767-c3d1-4493-b138-de93b4383f16-use_templates_for_your_interview.gif',
imageAlt: 'Use templates for your interviews GIF',
showPreloader: true
}
];
}

showImage(hint: ImageHint): void {
hint.showPreloader = false;
}

getStarted(): void {
if (this.currentUser == null) {
this.spinner.showTimer();
this.authService.login().then();
return;
}

this.router.navigateByUrl(this.getRedirectUrl());
}

ngOnDestroy(): void {
// ignored
}

private getRedirectUrl(): string {
return '/interviews/my';
titleService: TitleService
) {
titleService.resetTitle();
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<app-page-header>Privacy policy</app-page-header>
<app-page-header>Пользовательское соглашение</app-page-header>

<div class="container mb-5">
<div class="card">
Expand Down
Loading