Header image

Transforming Hiring with AI Talent Matching Platform

19/07/2023

1.9k

Talenten is an innovative platform in Vietnam that has transformed the way of hiring top talents. Our mission is to connect the best 10% of talents with excellent employers. Talenten uses AI to simplify hiring for candidates and businesses, making it fast and efficient.

Leveraging advanced AI technology, Talenten provides a range of innovative features such as the Jobmatch Score, video CVs, and a job-seeking social network, empowering candidates to showcase their skills and helping businesses find the perfect match for their organizations.

Transforming Hiring with AI Talent Matching Platform
Talenten – Transforming Hiring with AI Talent Matching Platform

The Catalyst for Transforming Candidate-Employer Relationships

As a forward-thinking recruiter, you understand the importance of building strong connections with top talent. However, the traditional relationship between candidates and employers has often been marked by challenges and inefficiencies. That’s where Talenten comes in, revolutionizing the dynamics between candidates and employers in profound ways.

Talenten has recognized the need to streamline and improve the candidate-employer relationship. Through its innovative platform, Talenten has transformed the way recruiters and candidates interact, enhancing the recruitment process in several key ways.

Enhanced Candidate Engagement

Talenten provides a user-friendly interface that attracts highly skilled candidates. By creating detailed profiles and showcasing their expertise, candidates can present themselves in the best possible light. This enhanced engagement not only captures the attention of recruiters but also enables them to make informed decisions based on comprehensive candidate information.

Intelligent Matching

Talenten’s intelligent matching algorithms analyze candidate profiles and job requirements to provide recruiters with a curated list of highly suitable candidates. This smart technology saves recruiters valuable time and effort by presenting them with candidates who possess the right skills, experience, and cultural fit for their organization.

Streamlined Screening

With Talenten, recruiters can easily screen candidates through video interviewing. This feature allows you to assess candidates’ communication skills, professionalism, and cultural fit remotely. By eliminating the need for in-person meetings, you can efficiently evaluate candidates and identify the top talent from a wider pool of applicants.

JobMatch Score

Talenten’s JobMatch Score is a unique scoring system that assesses candidates based on their skills, experiences, and compatibility with specific job roles. This score provides recruiters with an instant overview of a candidate’s suitability, enabling them to prioritize and shortlist candidates efficiently.

Talenten has transformed the candidate-employer relationship by introducing innovative features that improve engagement, communication, and the overall recruitment experience. By leveraging Talenten’s powerful platform, recruiters can connect with top talent, identify the most suitable candidates, and streamline the hiring process.

Talenten’s Trailblazing Solutions for Success

Talenten offers a range of services designed to simplify and optimize the recruitment process for employers. These services include:

  • Free Job Posting: Employers can post job openings on Talenten for free, expanding their reach to potential candidates.
  • Talent Search: Employers can find suitable candidates using Talentmatch and the expertise of the Talent Acquisition team.
  • Candidate Capability Assessment: Talenten’s industry experts analyze candidates’ capabilities, providing employers with a comprehensive understanding of their skills.
  • Smart Recruitment Tools: Businesses can streamline their recruitment process, from resume screening to competency evaluations, within the Talenten platform.
  • Strategic Talent Attraction Consulting: Talenten offers consulting services to help businesses implement effective recruitment methods and enhance their employer branding.
Talenten Hiring platform Services

Talenten’s Game-Changing Features for Candidates

Talenten’s Solutions is empowering candidates in their job search by providing a wide range of tailored features. Recognizing the importance of creating a positive and empowering experience, Talenten’s Solutions goes beyond traditional job search platforms.

Talentmatch

Using AI technology, Talenten assesses candidates’ skills to help them find the most suitable job opportunities.

Video CV

Candidates can create personalized video CVs that showcase their unique qualities, making them stand out to employers.

Marketplace

Talenten connects job seekers with good job options that match their career goals.

Job-seeking social network

Talenten allows candidates to create profiles, connect with experts, and interact with employers in a networking environment.

Job seeking social network

Innovative Development Journey: Building Talenten as an AI Recruiting Platform

Talenten’s development involved research, brainstorming, prototyping, and testing. Research and development identified market needs, while brainstorming generated innovative ideas. Prototyping and user testing ensured a user-friendly platform. Challenges included refining the AI talent matching algorithm and ensuring data security.

To overcome these challenges, our team collaborated with experts, conducted rigorous testing, and implemented strict security measures. Continuous feedback from users guided improvements and feature enhancements. Through these efforts, Talenten became an automated talent matching platform, effectively connecting top talents with employers in Vietnam.

Development Systems and Technologies

Talenten utilizes various resources and technologies to develop its services:

  • Details of entrustment: Design, Implementation, Testing, Migration, Maintenance & Operation
  • Platform: Web app, responsive web app, Google Analytics
  • Infrastructure & Architect: GCP, Serverless, MySQL, Docker, Github Actions
  • Development Language & Frameworks: NestJS, NextJS, SASS, Typescript, Terraform

Talenten: The best choice for your hiring process

In the dynamic realm of recruitment, Talenten emerges as a game-changer, reshaping the hiring landscape in Vietnam. With its groundbreaking talent matching platform, Talenten seamlessly connects exceptional candidates with employers in search of excellence, fostering an efficient and effective hiring experience for both parties involved.

By leveraging cutting-edge AI technology and a range of distinctive features, Talenten empowers candidates to highlight their abilities and find the best job opportunities while providing businesses with access to a wide network of exceptional talent. 

This ensures that recruiters can find the ideal candidates who perfectly align with their organizational requirements. This targeted approach saves recruiters time and resources by ensuring they can quickly and accurately connect with candidates who are most likely to excel within their organization. As a result, recruiters can confidently and efficiently hire candidates who align closely with their organizational needs, leading to better long-term outcomes and success for the company.

The forthcoming integration of AI in the CV profile represents a significant advancement that will further elevate the candidate experience. By providing personalized insights and tailored recommendations based on individual profiles, this development promises to revolutionize the hiring process, facilitating even more precise and efficient matches between candidates and employers. Talenten continues to spearhead innovation in recruitment, driving transformative change in the Vietnamese job market.

Powered by SupremeTech. Contact us for more information.

Related Blog

How-to

Knowledge

+0

    Level Up Your Code: Transitioning to Validated Environment Variables

    Validated Environment variables play a critical role in software projects of all sizes. As projects grow, so does the number of environment variables—API keys, custom configurations, feature flags, and more. Managing these variables effectively becomes increasingly complex. If mismanaged, they can lead to severe bugs, server crashes, and even security vulnerabilities.  While there’s no one-size-fits-all solution, having some structure in how we manage environment variables can really help reduce mistakes and confusion down the road. In this article, I’ll share how I’ve been handling them in my own projects and what’s worked well for me so far. My Personal Story When I first started programming, environment variables were a constant source of headaches. I often ran into problems like: Misspelled variable names.Failure to retrieve variable values, even though I was sure they were set.Forgetting to define variables entirely, leading to runtime errors. These issues were tricky to detect. Typically, I wouldn’t notice anything was wrong until the application misbehaved or crashed. Debugging these errors was tedious—tracing back through the code to find that the root cause was a missing or misconfigured environment variable. For a long time, I struggled with managing environment variables. Eventually, I discovered a more effective approach: validating all required variables before running the application. This process has saved me countless hours of debugging and has become a core part of my workflow. Today, I want to share this approach with you. A Common Trap in Real Projects Beyond personal hiccups, I’ve also seen issues arise in real-world projects due to manual environment handling. One particular pitfall involves relying on if/else conditions to set or interpret environment variables like NODE_ENV. For example: if (process.env.NODE_ENV === "production") { // do something } else { // assume development } This type of conditional logic can seem harmless during development, but it often leads to incomplete coverage during testing. Developers typically test in development mode and may forget or assume things will "just work" in production. As a result, issues are only discovered after the application is deployed — when it's too late. In one of our team’s past projects, this exact scenario caused a production bug that slipped through all local tests. The root cause? A missing environment variable that was only required in production, and the conditional logic silently skipped it in development. This highlights the importance of failing fast and loudly—ideally before the application even starts. And that’s exactly what environment variable validation helps with. The Solution: Validating Environment Variables The secret to managing environment variables efficiently lies in validation. Instead of assuming all necessary variables are correctly set, validate them at the application’s startup. This prevents the application from running in an incomplete or misconfigured state, minimizing runtime errors and improving overall reliability. Benefits of Validating Environment Variables Error Prevention: Catch missing or misconfigured variables early.Improved Debugging: Clear error messages make it easier to trace issues.Security: Ensures sensitive variables like API keys are set correctly.Consistency: Establishes a standard for how environment variables are managed across your team. Implementation Here’s a simple and structured way to validate environment variables in a TypeScript project. Step 1: Define an Interface Define the expected environment variables using a TypeScript interface to enforce type safety. export interface Config { NODE_ENV: "development" | "production" | "test"; SLACK_SIGNING_SECRET: string; SLACK_BOT_TOKEN: string; SLACK_APP_TOKEN: string; PORT: number; } Step 2: Create a Config Loader Write a function to load and validate environment variables. This loader ensures that each variable is present and meets the expected type or format. Step 3: Export the Configuration Use the config loader to create a centralized configuration object that can be imported throughout your project. import { loadConfig } from "./loader"; export const config = loadConfig(); Conclusion Transitioning to validated environment variables is a straightforward yet powerful step toward building more reliable and secure applications. By validating variables during startup, you can catch misconfigurations early, save hours of debugging, and ensure your application is always running with the correct settings.

    09/07/2025

    8

    Bao Dang D. Q.

    How-to

    +1

    • Knowledge

    Level Up Your Code: Transitioning to Validated Environment Variables

    09/07/2025

    8

    Bao Dang D. Q.

    How-to

    Knowledge

    +0

      Build Smarter: Best Practices for Creating Optimized Dockerfile

      If you’ve been using Docker in your projects, you probably know how powerful it is for shipping consistent environments across teams and systems. It's time to learn how to optimize dockerfile. But here’s the thing: a poorly written Dockerfile can quickly become a hidden performance bottleneck. Making your images unnecessarily large, your build time painfully slow, or even causing unexpected behavior in production. I’ve seen this firsthand—from early projects where we just “made it work” with whatever Dockerfile we had, to larger systems where the cost of a bad image multiplied across services. My name is Bao. After working on several real-world projects and going through lots of trial and error. I’ve gathered a handful of practical best practices to optimize Dockerfile that I’d love to share with you. Whether you’re refining a production-grade image or just curious about what you might be missing. Let me walk you through how I approach Docker optimization. Hopefully it’ll save you time, headaches, and a few docker build rage moments 😅. Identifying Inefficiencies in Dockerfile: A Case Study Below is the Dockerfile we’ll analyze: Key Observations: 1. Base Image: The Dockerfile uses ubuntu:latest, which is a general-purpose image. While versatile, it is significantly larger compared to minimal images like ubuntu:slim or Node.js-specific images like node:20-slim, node:20-alpine. 2. Redundant Package Installation: Tools like vim, wget, and git are installed but may not be necessary for building or running the application. 3. Global npm Packages: Pages like nodemon, ESLint, and prettier are installed globally. These are typically used for development and are not required in a production image. 4. Caching Issues: COPY . . is placed before npm install, invalidating the cache whenever any application file changes, even if the dependencies remain the same. 5. Shell Customization: Setting up a custom shell prompt (PS1) is irrelevant for production environments, adding unnecessary steps. 6. Development Tool in Production: The CMD uses nodemon, which is a development tool, to run the application Optimized your Docker Image Here’s how we can optimize the Dockerfile step by step. Showing the before and after for each section with the result to clearly distinguish the improvements. 1. Change the Base Image Before: FROM ubuntu:latest RUN apt-get update && apt-get install -y curl && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ apt-get install -y nodejs Use ubuntu:latest, a general-purpose image that is large and includes many unnecessary tools. After: FROM node:20-alpine Switches to node:20-alpine, a lightweight image specifically tailored for Node.js applications. Result: With the first change being applied, the image size is drastically reduced by about ~200MB.  2. Simplify Installed Packages Before: RUN apt-get update && apt-get install -y \ curl \ wget \ git \ vim \ python3 \ make \ g++ && \ curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ apt-get install -y nodejs Installs multiple tools (curl, wget, vim, git) and Node.js manually, increasing the image size and complexity. After: RUN apk add --no-cache python3 make g++ Uses apk (Alpine’s package manager) to install only essential build tools (python3, make, g++). Result: The image should be cleaner and smaller after removing the unnecessary tools, packages. (~250MB vs ~400MB with the older version) 3. Leverage Dependency Caching Before: COPY . . RUN npm install Copies all files before installing dependencies, causing cache invalidation whenever any file changes, even if dependencies remain unchanged. After: COPY package*.json ./ RUN npm install --only=production COPY . . Copies only package.json and package-lock.json first, ensuring that dependency installation is only re-run when these files change.Installs only production dependencies (--only=production) to exclude devDependencies. Result: Faster rebuilds and a smaller image by excluding unnecessary files and dependencies. 4. Remove Global npm Installations Before: RUN npm install -g nodemon eslint pm2 typescript prettier Installs global npm packages (nodemon, eslint, pm2, ect.) that are not needed in production, increasing image size. After: Remove Entirely: Global tools are omitted because they are unnecessary in production. Result: Reduced image size and eliminated unnecessary layers. 5. Use a Production-Ready CMD Before: CMD ["nodemon", "/app/bin/www"] Uses nodemon, which is meant for development, not production. Result: A streamlined and efficient startup command. 6. Remove Unnecessary Shell Customization Before: ENV PS1A="💻\[\e[33m\]\u\[\e[m\]@ubuntu-node\[\e[36m\][\[\e[m\]\[\e[36m\]\w\[\e[m\]\[\e[36m\]]\[\e[m\]: " RUN echo 'PS1=$PS1A' >> ~/.bashrc Sets and applies a custom shell prompt that has no practical use in production After: Remove Entirely: Shell customization is unnecessary and is removed. Result: Cleaner image with no redundant configurations or layers. Final Optimized Dockerfile FROM node:20-alpine WORKDIR /app RUN apk add --no-cache python3 make g++ COPY package*.json ./ RUN npm install --only=production COPY . . EXPOSE 3000 CMD ["node", "/app/bin/www"] 7. Leverage Multi-Stage Builds to Separate Build and Runtime In many Node.js projects, you might need tools like TypeScript or linters during the build phase—but they’re unnecessary in the final production image. That’s where multi-stage builds come in handy. Before: Everything—from installation to build to running—happens in a single image, meaning all build-time tools get carried into production. After: You separate the "build" and "run" stages, keeping only what’s strictly needed at runtime. Result: Smaller, cleaner production imageBuild-time dependencies are excludedFaster and safer deployments Final Optimized Dockerfile # Stage 1 - Builder FROM node:20-alpine AS builder WORKDIR /app RUN apk add --no-cache python3 make g++ COPY package*.json ./ RUN npm install --only=production COPY . . # Stage 2 - Production FROM node:20-alpine WORKDIR /app COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app ./ EXPOSE 3000 CMD ["node", "/app/bin/www"] Bonus. Don’t Forget .dockerignore Just like .gitignore, the .dockerignore file excludes unnecessary files and folders from the Docker build context (like node_modules, .git, logs, environment files, etc.). Recommended .dockerignore: node_modules .git *.log .env Dockerfile.dev tests/ Why it matters: Faster builds (Docker doesn’t copy irrelevant files)Smaller and cleaner imagesLower risk of leaking sensitive or unnecessary files Results of Optimization 1. Smaller Image Size: The switch to node:20-alpine and removal of unnecessary packages reduced the image size from 1.36GB, down to 862MB. 2. Faster Build Times: Leveraging caching for dependency installation speeds up rebuilds significantly.Build No Cache:Ubuntu (Old Dockerfile): ~126.2sNode 20 Alpine (New Dockerfile): 78.4sRebuild With Cache (After file changes):Ubuntu: 37.1s (Re-run: npm install)Node 20 Alpine: 8.7s (All Cached) 3. Production-Ready Setup: The image now includes only essential build tools and runtime dependencies, making it secure and efficient for production. By following these changes, your Dockerfile is now lighter, faster, and better suited for production environments. Let me know if you’d like further refinements! Conclusion Optimizing your Dockerfile is a crucial step in building smarter, faster, and more efficient containers. By adopting best practices: such as choosing the right base image, simplifying installed packages, leveraging caching, and using production-ready configurations, you can significantly enhance your build process and runtime performance. In this article, we explored how small, deliberate changes—like switching to node:20-alpine, removing unnecessary tools, and refining dependency management—can lead to.

      08/07/2025

      18

      How-to

      +1

      • Knowledge

      Build Smarter: Best Practices for Creating Optimized Dockerfile

      08/07/2025

      18

      View Transitions API

      Knowledge

      Software Development

      +0

        How to Create Smooth Navigation Transitions with View Transitions API and React Router?

        Normally, when users move between pages in a web app, they see a white flash or maybe a skeleton loader. That’s okay, but it doesn’t feel smooth. Try View Transitions API! Imagine you have a homepage showing a list of movie cards. When you click one, it takes you to a detail page with a big banner of the same movie. Right now, there’s no animation between these two screens, so the connection between them feels broken. With the View Transitions API, we can make that connection smoother. It creates animations between pages, helping users feel like they’re staying in the same app instead of jumping from one screen to another. Smooth and connected transition using View Transitions API In this blog, you’ll learn how to create these nice transitions using the View Transitions API and React Router v7. Basic Setup The easiest way to use view transitions is by adding the viewTransition prop to your React Router links: import { NavLink } from 'react-router'; <NavLink to='/movies/avengers-age-of-ultron' viewTransition> Avengers: Age of Ultron </NavLink> Only cross-fade animation without element linking It works — but it still feels a bit plain. The whole page fades, but nothing stands out or feels connected. Animating Specific Elements In the previous example, the entire page takes part in the transition. But sometimes, you want just one specific element — like an image — to animate smoothly from one page to another. Let’s say you want the movie image on the homepage to smoothly turn into the banner on the detail page. We can do that by giving both images the same view-transition-name. // app/routes/home.tsx export default function Home() { return ( <NavLink to='/movies/avengers-age-of-ultron' viewTransition> <img className='card-image' src='/assets/avengers-age-of-ultron.webp' alt='Avengers: Age of Ultron' /> <span>Avengers: Age of Ultron</span> </NavLink> ); } // app/routes/movie.tsx export default function Movie() { return ( <img className='movie-image' src='/assets/avengers-age-of-ultron.webp' alt='Avengers: Age of Ultron' /> ); } // app.css ... /* This class assign to the image of the movie card in the home page */ .card-image { view-transition-name: movie-image; } /* This class assign to the image of the movie in the movie details page */ .movie-image { view-transition-name: movie-image; } ... Now, when you click a movie card, the image will smoothly grow into the banner image on the next page. It feels much more connected and polished. Animating a single element with view-transition-name Handling Dynamic Data  This works great for a single element, but what happens if you have a list of items, like multiple movies? If you assign the same view-transition-name to all items, the browser won’t know which one to animate. Each transition name must be unique per element — but hardcoding different class names for every item is not scalable, especially when the data is dynamic. Incorrect setup – Same view-transition-name used for all items in a list. The Solution: Assign view-transition-name during navigation Instead of setting the view-transition-name upfront, a more flexible approach is to add it dynamically when navigation starts — that is, when the user clicks a link. // app/routes/home.tsx export default function Home({ loaderData: movies }: Route.ComponentProps) { return ( <ul> {movies.map((movie) => ( <li key={movie.id}> <NavLink to={`/movies/${movie.id}`} viewTransition> <img className='card-image' src={movie.image} alt={movie.title} /> <span>{movie.title}</span> </NavLink> </li> ))} </ul> ); } // app/routes/movie.tsx export default function Movie({ loaderData: movie }: Route.ComponentProps) { return ( <img className='movie-image' src={movie.image} alt={movie.title} /> ); } // app.css ... /* Assign transition names to elements during navigation */ a.transitioning .card-image { view-transition-name: movie-image; } .movie-image { view-transition-name: movie-image; } ... Final output – Smooth transition with dynamic list items Here’s what happens: When a user clicks a link, React Router adds a transitioning class to it.That class tells the browser which image should animate.On the detail page, the image already has view-transition-name: movie-image, so it matches. This way, you can reuse the same CSS for all items without worrying about assigning unique class names ahead of time. You can explore the full source code below: Live DemoSource on GitHub Browser Support The View Transitions API is still relatively new, and browser support is limited:  Chrome (from version 111)Edge (Chromium-based)Firefox & Safari: Not supported yet (as of May 2025) You should always check for support before using it in production. Conclusion The View Transitions API gives us a powerful tool to deliver smooth, native-feeling page transitions in our web apps. By combining it with React Router, you can: Enable basic transitions with minimal setupAnimate specific elements using view-transition-nameHandle dynamic content gracefully by assigning transition names at runtime Hope this guide helps you create more fluid and polished navigation experiences in your React projects!

        08/07/2025

        24

        Knowledge

        +1

        • Software Development

        How to Create Smooth Navigation Transitions with View Transitions API and React Router?

        08/07/2025

        24

        The journey of Anh Duong

        Our culture

        +0

          Anh Duong – A Journey of Rising Above to Shine Bright

          At SupremeTech, we often meet during meetings, rush through deadlines together, and celebrate when our products are released. But behind those intense work hours, there are powerful stories of personal transformation & growth that we don’t always get to hear. ST is not only a witness to these journeys but also a part of them. In May, during our ST WOW section—a time where we honor people who make others say “WOW,” not only in work but also in life—we recognized Anh Duong. Duong has been with SupremeTech for four years and has gone through an impressive personal transformation. Let’s explore his story together! From a Shy Boy to the Confident Anh Duong Today Just over two years ago, Duong often felt insecure, especially about his appearance. He was skinny and had trouble even carrying water bottles around the office. He often felt tired and weak due to poor health. These little moments slowly pushed him to make a change, not to impress others, but to take control of his life. He started going to the gym in April 2023. At first, it was just something to try out. When the numbers on the scale didn’t move, he felt discouraged. But instead of giving up, that became a turning point. He chose discipline. He chose daily habits. He set long-term goals. Day by day, these choices built into something bigger—not just in how he looked, but in how he felt. No Trainer, No Showing Off – Just Self-Understanding Duong didn’t have a personal trainer. There was no magic solution. He studied on his own to learn what worked for his body—what foods, exercises, and routines suited him best. He designed his own meals, workouts, and rest schedule. Not to meet someone else’s standards, but to fit what he truly needed. Now that he’s “in shape,” his training is no longer a challenge—it’s just part of a healthy lifestyle. Success Measured by Spirit, Not Muscles After one year, Duong said his energy had improved significantly. He rarely feels drained now. People around him notice he’s more cheerful and full of life. And after two years? He says it’s a turning point—he truly feels proud of what he has achieved with his body. Now, he’s more confident. He’s in a relationship. His family is proud. And most importantly, he inspires others who once felt the same way. “You won’t know until you try. Don’t work out to show off—do it to change yourself.”Nguyen Van Anh Duong That’s Duong's message to anyone who feels unsure, insecure, or not strong enough to start. At ST, we’re proud to have people like Anh Duong—not just skilled at work, but also strong in their personal lives. We believe going far takes not only skills but also willpower. It’s not just about working together, but also living and growing together. Thank you, Anh Duong, for your personal transformation effort and for being a warm and strong light in our ST family. Related articles: From Unpaid Trial to the Top: The Inspiring Rise to Vice PresidentFrom Seeking The Path to Leading The Way: Phuoc’s Journey at SupremeTech

          27/06/2025

          79

          Our culture

          +0

            Anh Duong – A Journey of Rising Above to Shine Bright

            27/06/2025

            79

            Customize software background

            Want to customize a software for your business?

            Meet with us! Schedule a meeting with us!